pandas OrderedDict 条带 space read_excel
pandas OrderedDict strip space read_excel
我有一个超过 100 页的 excel 文件。我需要导入 pandas 并创建一个数据框。问题是一些列标题包含 spaces 所以我得到一个包含一些重复列的数据框。
是否可以在 OrderedDict 的列中删除 space?我知道我可以在数据框中使用 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
非常感谢
简单定义separate,方便:
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 个 sheet,并且您的 sheet 的名称是可迭代的,例如 "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)
如果您正在阅读多张工作表,并且您的工作簿很大,more efficient 使用 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)
我有一个超过 100 页的 excel 文件。我需要导入 pandas 并创建一个数据框。问题是一些列标题包含 spaces 所以我得到一个包含一些重复列的数据框。
是否可以在 OrderedDict 的列中删除 space?我知道我可以在数据框中使用 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
非常感谢
简单定义separate,方便:
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 个 sheet,并且您的 sheet 的名称是可迭代的,例如 "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)
如果您正在阅读多张工作表,并且您的工作簿很大,more efficient 使用 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)