Python 将字典转换为数据帧
我有一个现有的数据帧,我正在尝试连接一个字典,其中字典的长度不同于数据帧Python 将字典转换为数据帧,python,dictionary,pandas,Python,Dictionary,Pandas,我有一个现有的数据帧,我正在尝试连接一个字典,其中字典的长度不同于数据帧 >>> df A B C 0 0.46324 0.32425 0.42194 1 0.10596 0.35910 0.21004 2 0.69209 0.12951 0.50186 3 0.04901 0.31203 0.11035 4 0.43104 0.62413 0.20567 5 0.43412 0.13720 0.
>>> df
A B C
0 0.46324 0.32425 0.42194
1 0.10596 0.35910 0.21004
2 0.69209 0.12951 0.50186
3 0.04901 0.31203 0.11035
4 0.43104 0.62413 0.20567
5 0.43412 0.13720 0.11052
6 0.14512 0.10532 0.05310
及
我正在尝试将测试添加到df
,同时将键更改为“D”
和“C”
,我已经查看了
及
这表明我应该能够将字典连接到数据帧
>>> df
A B C
0 0.46324 0.32425 0.42194
1 0.10596 0.35910 0.21004
2 0.69209 0.12951 0.50186
3 0.04901 0.31203 0.11035
4 0.43104 0.62413 0.20567
5 0.43412 0.13720 0.11052
6 0.14512 0.10532 0.05310
我试过:
pd.concat([df, test], axis=1, ignore_index=True, keys=["D", "E"])
pd.concat([df, test], axis=1, ignore_index=True)
但是我一点运气都没有,我想要达到的结果是
df
A B C D E
0 0.46324 0.32425 0.42194 0.23413 0.01293
1 0.10596 0.35910 0.21004 0.19235 0.12235
2 0.69209 0.12951 0.50186 0.51221 0.63291
3 0.04901 0.31203 0.11035 NaN NaN
4 0.43104 0.62413 0.20567 NaN NaN
5 0.43412 0.13720 0.11052 NaN NaN
6 0.14512 0.10532 0.05310 NaN NaN
假设要将它们添加为行:
>>> pd.concat([df, pd.DataFrame(test.values(), columns=df.columns)], ignore_index=True)
A B C
0 0.46324 0.32425 0.42194
1 0.10596 0.35910 0.21004
2 0.69209 0.12951 0.50186
3 0.04901 0.31203 0.11035
4 0.43104 0.62413 0.20567
5 0.43412 0.13720 0.11052
6 0.14512 0.10532 0.05310
7 0.01293 0.12235 0.63291
8 0.23413 0.19235 0.51221
如果添加为新列:
df_new = pd.concat([df, pd.DataFrame(test.values()).T], ignore_index=True, axis=1)
df_new.columns = \
df.columns.tolist() + [{'One': 'D', 'Two': 'E'}.get(k) for k in test.keys()]
>>> df_new
A B C E D
0 0.46324 0.32425 0.42194 0.01293 0.23413
1 0.10596 0.35910 0.21004 0.12235 0.19235
2 0.69209 0.12951 0.50186 0.63291 0.51221
3 0.04901 0.31203 0.11035 NaN NaN
4 0.43104 0.62413 0.20567 NaN NaN
5 0.43412 0.13720 0.11052 NaN NaN
6 0.14512 0.10532 0.05310 NaN NaN
字典中不保证顺序(例如,test
),因此新列名实际上需要映射到键。唯一的方法是:
df.join(pd.DataFrame(test).rename(columns={'One':'D','Two':'E'}))
A B C D E
0 0.46324 0.32425 0.42194 0.23413 0.01293
1 0.10596 0.35910 0.21004 0.19235 0.12235
2 0.69209 0.12951 0.50186 0.51221 0.63291
3 0.04901 0.31203 0.11035 NaN NaN
4 0.43104 0.62413 0.20567 NaN NaN
5 0.43412 0.13720 0.11052 NaN NaN
6 0.14512 0.10532 0.05310 NaN NaN
因为正如@Alexander正确提到的,连接的行数应该匹配。否则,与您的情况一样,缺少的行将填充NaN
您是否需要索引来匹配“1”和“2”,或者df
中的新行应该是7和8?我希望最上面的行是“A”|“B”|“C”|“D”|“E”
如果可能,而不是“A”|“B”|“C”|“1”|“2”
我认为如果添加新列,将产生与dataframe(7)相同的行数。只有三行,所以我假设您正在向数据帧追加行。