我有大约300个CSV文件,我想用Pandas 将它们合并成一个文件.它们都有3行变量名(第一行中的Project、第二行中的Device_1和第三行中的Variable). 第一列类似于(‘Asset’,‘Element’,‘Date’),继续时间序列的值.有时名称是其他语言的,但有100个文件的第一行是(‘ts’,nan,nan),所以我需要替换多重索引名称的第一个"列",以便能够在完成合并文件后按日期对其进行排序.
df.iloc[:3,:5]
Out[16]:
ts Asset_1
nan Device_1 Device_2 Device_3
nan Variable_1 Variable_2 Variable_1 Variable_1
0 2022-12-31 00:00:00 0.0 NaN 0.0 0.0
1 2022-12-31 00:05:00 0.0 NaN 0.0 0.0
2 2022-12-31 00:10:00 0.0 NaN 0.0 0.0
因此,基本上我想要的是多索引名称的第一列,与我的新_COLLES值相同
Asset Asset_1
Device Device_1 Device_2 Device_3
Date Variable_1 Variable_2 Variable_1 Variable_1
0 2022-12-31 00:00:00 0.0 NaN 0.0 0.0
1 2022-12-31 00:05:00 0.0 NaN 0.0 0.0
2 2022-12-31 00:10:00 0.0 NaN 0.0 0.0
到目前为止,我已经try 了三个层次的迭代:
new_cols = ['Asset','Element','Date']
for i in range(3):
df.rename(columns={df.columns[0][i]:new_cols[i]},inplace=True)
然而,由于此方法不是按位置替换,而是按名称替换,因为第二行和第三行具有相同的名称(NaN),所以最终的名称是(‘Asset’,‘Date’,‘Date’),当我try 将其与其他文件合并时,最终的数据帧有两个日期时间列.
我try 使用SET_LEVES,但必须将VERIFY_INTEGRATION设置为FALSE,否则会收到错误:
new_cols = ['Asset','Element','Date']
for i in range(3):
updated_columns = [new_cols[i]] + list(df.columns.get_level_values(i)[1:])
df.columns.set_levels(updated_columns,level=i,verify_integrity=True)
ValueError: Level values must be unique: ['Asset', 'Asset_1','Asset_1','Asset_1','Asset_1'] on level 0
但是,如果我将VERIFY_INTEGRATION标记为FALSE,最终的名称就会混淆,我不知道为什么.
有没有办法用given position替换MultiIndex中的任何名称?比如说像ILOC之类的,
pd.Multiindex.iloc[0,2]='Date'