Pandas -当csv中存在列时使用

neekobn8  于 2023-11-14  发布在  其他
关注(0)|答案(2)|浏览(98)

由于列和usecol列表不同,因此它会吐出错误
“ValueError”Usecols与名称不匹配。
如果CSV中存在列,我如何使用“usecol”?
csv示例:

df.csv

AB,CD,EF,GH
foo,20160101,a,1
foo,20160102,a,3
foo,20160103,a,5

字符串
阅读csv:

import pandas as pd

df = pd.read_csv('df.csv', 
    header=0,usecols=["AB", "CD", "IJ"])


这是我想要的

df

date       AB   CD
2016-01-01  a    1
2016-01-02  a    3
2016-01-03  a    5


忽略“IJ”。

8zzbczxx

8zzbczxx1#

usecols中使用lambda可以跳过不在csv中的列:

import pandas as pd
from io import StringIO

txt = """AB,CD,EF,GH
foo,20160101,a,1
foo,20160102,a,3
foo,20160103,a,5"""

usecols = ['AB', 'CD', 'IJ']

df = pd.read_csv(StringIO(txt), usecols=lambda c: c in set(usecols))

print(df)

    AB        CD
0  foo  20160101
1  foo  20160102
2  foo  20160103

字符串
解释可以在pandas文档中找到:
https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html
如果可调用,则将根据列名计算可调用函数,返回可调用函数计算结果为True的名称。有效可调用参数的示例为lambda x:x.upper()in [“AAA”,“BBB”,“DDD”]。使用此参数可加快解析时间并降低内存使用量。

pbossiut

pbossiut2#

  • 正常导入csv *
import pandas as pd
from io import StringIO

txt = """AB,CD,EF,GH
foo,20160101,a,1
foo,20160102,a,3
foo,20160103,a,5"""

df = pd.read_csv(StringIO(txt))

print(df)

    AB        CD EF  GH
0  foo  20160101  a   1
1  foo  20160102  a   3
2  foo  20160103  a   5

字符串
reindexintersection

usecols = ['AB', 'CD', 'IJ']
df.reindex_axis(df.columns.intersection(usecols), 1)

    AB        CD
0  foo  20160101
1  foo  20160102
2  foo  20160103

​

相关问题