如何在熊猫中读取具有其他列名称的列?

时间:2019-09-26 01:14:33

标签: python python-3.x pandas

我必须阅读和处理一组文件(例如100个文件),其中一个文件的列名为“ Idass”。其他文件带有列名“ IdassId”。 处理后,我选择了几列,然后将输出写入excel。

df.to_excel(writer, columns=['Date','IdassId','TankNo','GradeNo','Sales'],sheet_name='sales')

在这里,我没有输入单个文件的条目,因为它没有列名作为“ IdassId”。它包含带有“ Idass”的特定列。 (我无法在处理之前重命名该列,因为它是来自另一个过程的自动化过程)。 我尝试使用IdassId重命名该列,并尝试在excel中编写。

d = {'Idass': 'IdassId'}
df.rename(columns=d).to_excel(writer, columns=['Date','IdassId','TankNo','GradeNo','Sales'],sheet_name='sales')

但是上面给出了错误,因为另一个文件带有与'idassId'相同的列名

ValueError: cannot reindex from a duplicate axis

如何在熊猫中做到这一点?

2 个答案:

答案 0 :(得分:0)

您定义的d {}似乎正在尝试将Idass重命名为IdassId。我认为您的key:value配对已切换。

答案 1 :(得分:0)

我假设您将excel文件串联在一起,所以它看起来与下面类似。

   Idass IdassId
0   0.0 NaN
1   1.0 NaN
2   2.0 NaN
3   3.0 NaN
4   4.0 NaN
5   NaN 0.0
6   NaN 1.0
7   NaN 2.0
8   NaN 3.0
9   NaN 4.0

如果要将Idass重命名为IdassId,则将有两个名为IdassId的列,这就是导致错误的原因。

您应该能够填写IdassID的空值并获得所需的结果。

df['IdassId'] = df['IdassId'].where(df['IdassId'].notnull(), df['Idass'])
df.drop('Idass', axis=1, inplace=True)

    IdassId
0   0.0
1   1.0
2   2.0
3   3.0
4   4.0
5   0.0
6   1.0
7   2.0
8   3.0
9   4.0