【问题标题】:pandas OrderedDict strip space read_excelpandas OrderedDict 带空间 read_excel
【发布时间】:2020-01-20 11:07:17
【问题描述】:

我有一个超过 100 张的 Excel 文件。我需要导入熊猫并创建一个数据框。问题是一些列标题包含空格,所以我得到一个包含一些重复列的数据框。

是否可以在 OrderedDict 的列中去除空格?我知道我可以在数据框中使用str.strip(),但找不到 OrderedDict 的任何内容。

我在excel中有如下结构:

sheet TEST:
   'ID1' 'ID2'  'ID3'  'ID4'
1   A     2016   val    val 
2   B     2017   val    val
3   C     2018   val    val

sheet TEST2:
   'ID1' 'ID2'  'ID3 ' 'ID4'
1   A     2016   val    val 
2   B     2017   val    val
3   C     2018   val    val

sheet TEST3:
   'ID1' 'ID2'  'ID3' 'ID4 '
1   A     2016   val    val 
2   B     2017   val    val
3   C     2018   val    val

目前我正在执行以下操作:

df = pd.read_excel (File location, sheet_name = ['TEST', 'TEST2', 'TEST3'])

df = pd.concat(df, axis=0, sort=False)
df = df.reset_index()

这是我得到的:

   'ID1'  'ID2'  'ID3'  'ID4' 'ID3 ' 'ID4 '
1   A     2016    val    val   NaN    NaN
2   B     2017    val    val   NaN    NaN
3   C     2018    val    val   NaN    NaN
4   A     2016    NaN    val   val    NaN
5   B     2017    NaN    val   val    NaN
6   C     2018    NaN    val   val    NaN
7   A     2016    val    NaN   NaN    val
8   B     2017    val    NaN   NaN    val
9   C     2018    val    NaN   NaN    val

这是我需要的:

   'ID1'  'ID2'  'ID3'  'ID4' 
1   A     2016    val    val   
2   B     2017    val    val   
3   C     2018    val    val   
4   A     2016    val    val   
5   B     2017    val    val   
6   C     2018    val    val   
7   A     2016    val    val   
8   B     2017    val    val   
9   C     2018    val    val   

非常感谢

【问题讨论】:

  • 如果将工作表分成不同的变量会更容易,例如 df1 = sheet1, df2 = sheet2, df3 = sheet3

标签: python pandas strip ordereddict


【解决方案1】:

如果您在多个工作表中阅读,并且您的工作簿很大,则使用pd.ExcelFile 创建ExcelFile 对象是more efficient,然后单独访问工作表。它还使列名格式非常简单:

import pandas as pd

xls = pd.ExcelFile(filepath)

dfs = []
for sheet in xls.sheet_names:
    df = pd.read_excel(xls, sheet)
    df.columns = df.columns.str.strip()
    dfs.append(df)

df = pd.concat(dfs)

【讨论】:

  • 很好的答案,我通常对具有 n 个工作表的非常大的工作簿执行相同的操作。不知道性能差异,您是否对此进行了测试,或者您可以为我的教育指出什么?
  • 是的,刚刚添加了一个指向讨论此问题的问题的链接:stackoverflow.com/q/26521266/1186342
【解决方案2】:

简单地定义分开,以使其更容易:

df1 = pd.read_excel (File location TEST, sheet_name = 'TEST')
df2 = pd.read_excel (File location TEST2, sheet_name = 'TEST2')
df3 = pd.read_excel (File location TEST3, sheet_name = 'TEST3')

然后像这样连接它:

df = pd.concat([df1,df2,df3], axis=0)
df = df.reset_index()

希望对你有帮助:)

编辑:如果您想通过循环应用它,只需执行以下操作: 假设您有 150 张工作表,并且工作表的名称是可迭代的,例如 "TEST" "TEST2" "TEST3".."TEST150"

listdf = []
name=""
for x in range(150):
    if x==0: name = "TEST"
    elif x>0: name= "TEST" + str(x+1)
    df = pd.read_excel (File location TEST, sheet_name = name)
    listdf.append(df)

newbigdf = pd.concat(listdf, axis=0)

【讨论】:

    猜你喜欢
    • 2016-05-21
    • 2017-08-14
    • 1970-01-01
    • 2021-06-21
    • 2017-01-13
    • 2017-06-10
    • 2020-06-02
    • 1970-01-01
    • 2019-12-25
    相关资源
    最近更新 更多