使用Pandas时添加列名称.Dataframe删除行

时间:2019-10-11 15:59:16

标签: python pandas dataframe

如果执行以下操作,我将得到一个数据字典,其中字典键作为标题,并将值排成一行:

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

为什么?

3 个答案:

答案 0 :(得分:2)

之所以发生这种情况,是因为在您的数据d中没有名称为123的值/列名称。 在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})