如果执行以下操作,我将得到一个数据字典,其中字典键作为标题,并将值排成一行:
d = {'a':['a'], 'b':['b'], 'c':['c']}
pd.DataFrame(d)
a b c
0 a b c
如果我这样做但添加了列名,则数据框为空...
d = {'a':['a'], 'b':['b'], 'c':['c']}
pd.DataFrame(d, columns = [1,2,3])
1 2 3
为什么?
答案 0 :(得分:2)
之所以发生这种情况,是因为在您的数据d
中没有名称为1
,2
和3
的值/列名称。
在pandas doc中,参数列:
列:索引或类似数组的列 用于结果框架的列标签。如果未提供列标签,则默认为RangeIndex(0,1,2,…,n)。
在这里您可以看到所有三种情况:
df = pd.DataFrame(d) #Uses default method for columns
print(df)
输出:
a b c
0 a b c
将RangeIndex值传递给columns
:
d = {'a':['a'], 'b':['b'], 'c':['c']}
pd.DataFrame(d, columns = [1,2,3]) #These values are not the RangeIndex values, but label values
输出:
Empty dataframe #Because there's no columns names 1, 2, or 3
将索引值传递给columns
:
df = pd.DataFrame(d,columns = ['a','b','c'])
print(df)
输出:
a b c
0 a b c
答案 1 :(得分:2)
之所以会发生这种情况,是因为您将数据框的列重新索引为[0,1,2]并且值确实存在于'a','b','c'中,那么您需要: / strong>
d = {'a':['a'], 'b':['b'], 'c':['c']}
df=pd.DataFrame(d)
print(df)
a b c
0 a b c
df.rename(columns={'a':0,'b':1,'c':2},inplace=True)
print(df)
0 1 2
0 a b c
还可以使用:
df.columns=[0,1,2]
d = {'a':['a'], 'b':['b'], 'c':['c']}
df=pd.DataFrame(d)
print(df)
a b c
0 a b c
df.columns=[0,1,2]
print(df)
0 1 2
0 a b c
答案 2 :(得分:0)
由于您没有重命名设置新列的列,请尝试:
d = {'a':['a'], 'b':['b'], 'c':['c']}
df=pd.DataFrame(d)
df.rename(columns = {'a': 1, 'b': 2, 'c':3})