【问题标题】:Read certain column in excel to dataframe将excel中的某些列读取到数据框
【发布时间】:2019-06-04 00:21:25
【问题描述】:

我想将 excel 文件中的某些列读入数据框,但是我想用列标题名称指定列。

例如,我有一个 Excel 文件,在工作表 2 中有两列:A 列中的“数字”和 B 列中的“ForeignKey”)。我想将“ForeignKey”导入数据框。我使用以下脚本做到了这一点:

xl_file = pd.read_excel('D:/SnapPython/TestDF.xlsx', sheet_name='Sheet 2', usecols=[0,1]) 

它在我的 xl_file 中显示以下内容:

       number ForeignKey
0       1        abc
1       2        def
2       3        ghi

如果列数较少,我可以通过指定usecols=[1]来获取“ForeignKey”。但是,如果我有很多列并且知道列名模式,则通过指定列名会更容易。我尝试了以下代码,但它给出了空数据框。

xl_file = pd.read_excel('D:/SnapPython/TestDF.xlsx', sheet_name='Sheet 2', usecols=['ForeignKey']) 

根据以下链接中的讨论,上面的代码运行良好,但适用于read_csv

[How to drop a specific column of csv file while reading it using pandas?

有没有办法读取excel文件?

提前谢谢你

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    有一个解决方案,但 csv 的处理方式与 excel 不同。

    来自文档,用于 csv:

    usecols : 类似列表或可调用,默认无

    例如,一个有效的类似列表的 usecols 参数应该是 [0, 1, 2] 或 ['foo', 'bar', 'baz']。

    对于excel:

    usecols : int 或 list,默认无

    • 如果 None 则解析所有列,
    • 如果 int 则表示要解析的最后一列
    • 如果是整数列表,则表示要解析的列号列表
    • 如果字符串则表示 Excel 列字母和列范围的逗号分隔列表(例如“A:E”或“A,C,E:F”)。范围包括两边

    所以你需要这样称呼它:

    xl_file = pd.read_excel('D:/SnapPython/TestDF.xlsx', sheet_name='Sheet 2', usecols='ForeignKey')
    

    如果你还需要'number':

    xl_file = pd.read_excel('D:/SnapPython/TestDF.xlsx', sheet_name='Sheet 2', usecols='number,ForeignKey')
    

    编辑: 您需要输入 excel 列的名称而不是数据的名称。 另一个答案解决了这个问题。 但是您不需要 'B:B','B' 会起到作用但是不会改善带有数字的 usecols。

    如果您可以在短时间内加载所有数据,那么解决此问题的最佳方法可能是解析所有列,然后选择所需的列:

    xl_file = pd.read_excel('D:/SnapPython/TestDF.xlsx', sheet_name='Sheet 2')['ForeignKey']
    

    【讨论】:

    • Alexis 这不是正确的解决方案。你验证了吗?
    • @Alexis,你最后的建议对我有用。我会接受这个问题。谢谢
    【解决方案2】:

    您需要以范围格式传递 excel 列名,例如colname:colname.

    例如,如果 ForeignKey 出现在您的 Excel 工作表 2 的 B 列中,则执行 -

    xl_file = pd.read_excel('D:/SnapPython/TestDF.xlsx', sheet_name='Sheet 2', usecols='B:B') 
    

    参考 Github issue 和相同的规定解决方案。

    【讨论】:

    • @anky_91 我也检查了usecols='ForeignKey',但我收到了一个空数据框。
    • 就是这样。我有一个包含数百列但带有日期和时间命名的 Excel。因为我知道我想知道什么日期和时间,所以通过指定列名而不是excel列名会更有效。我不能像 read_csv 那样直接将此列标题名称与 read_excel 一起使用。
    • @anky_91 我不认为 OP 知道哪一列会有外键,制作这样的 100 对字典似乎不切实际。
    猜你喜欢
    • 2016-01-28
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2020-07-16
    • 2023-01-14
    • 2016-02-12
    • 2016-07-18
    相关资源
    最近更新 更多