如何在不显示NAN值的情况下更改从字典创建的数据框的索引和列?

时间:2018-12-22 14:45:51

标签: python pandas dictionary dataframe

import pandas as pd

df_dict = {'k1':(1,2,3),'k2':(20,30,40),'k3':(30,40,50),'k4':[100,200,300]}

data_Frame_dict = pd.DataFrame(data=df_dict,index=['k11','k22','k33'],columns=['s1','s2','s3','s4'])

data_Frame_dict

     s1   s2   s3   s4
k11  NaN  NaN  NaN  NaN
k22  NaN  NaN  NaN  NaN
k33  NaN  NaN  NaN  NaN

这将使数据帧中的所有数据变为NAN。我该如何解决?

1 个答案:

答案 0 :(得分:1)

传递字典时,columns参数用于从字典中选择用作列的键。明白我的意思,这里有一个例子:

pd.DataFrame(df_dict, columns=['k1', 'k4'])

   k1   k4
0   1  100
1   2  200
2   3  300

如果在字典中不存在您传递的列值,则该列将作为充满NaN的列插入。另一个示例,请参见

pd.DataFrame(df_dict, columns=['k1', 'k4', 'dummy_col'])

   k1   k4 dummy_col
0   1  100       NaN
1   2  200       NaN
2   3  300       NaN

您可以做的是使用原始列名,然后将其重命名为第二步。

df = pd.DataFrame(data=df_dict, index=['k11','k22','k33']) 
df.columns = ['s1','s2','s3','s4']

请记住,列顺序可能不一定反映实际的列顺序,因为这取决于您的python实现是否支持有序词典(剧透警报,仅在3.6+上受支持)。

我建议的是

col_mapping = {'k1': 's1', 'k2': 's2', ...}
df = (pd.DataFrame(data=df_dict, index=['k11','k22','k33'])
        .rename(col_mapping, axis=1))