【问题标题】:Pandas - Usecols when columns exist in csvPandas - 当列存在于 csv 中时 Usecols
【发布时间】:2020-02-05 20:12:05
【问题描述】:

由于usecols的列和列表不同,它会吐出错误

“ValueError”Usecols 与名称不匹配。

如果 csv 中存在列,我如何“使用col”?

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”。

【问题讨论】:

  • 你为什么在usecols列表中有"IJ"?拿出来。
  • 这只是一个示例,我使用的 df 有数百列。在我 read_csv 的时候,csv 中的列被黑盒化了。
  • 并且您想要usecols 与 csv 中的内容相交的列?
  • 是的,“usecol”和csv中的列的交集

标签: python csv pandas


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    正常导入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
    
    ​
    

    【讨论】:

      猜你喜欢
      • 2013-02-07
      • 2017-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-23
      相关资源
      最近更新 更多