Pandas 将索引列分配给空数据帧
我正在创建一个空的数据框,然后我希望一次向一行添加数据。我想在第一列上建立索引,Pandas 将索引列分配给空数据帧,pandas,dataframe,Pandas,Dataframe,我正在创建一个空的数据框,然后我希望一次向一行添加数据。我想在第一列上建立索引,'customer\u ID' 我有这个: In[1]: df = pd.DataFrame(columns = ['customer_ID','a','b','c'],index=['customer_ID']) In[2]: df Out[3]: customer_ID a b c customer_ID NaN NaN NaN NaN 所以已经
'customer\u ID'
我有这个:
In[1]: df = pd.DataFrame(columns = ['customer_ID','a','b','c'],index=['customer_ID'])
In[2]: df
Out[3]:
customer_ID a b c
customer_ID NaN NaN NaN NaN
所以已经有一行我不想要的NaN
。
我可以将索引指向第一列而不添加一行数据吗?是。。。如果您愿意,您可以随时
dropna
:
df = df.set_index('customer_ID').dropna()
df
因为在创建数据帧时,数据帧中没有任何行
df= pd.DataFrame({'customer_ID': ['2'],'a': ['1'],'b': ['A'],'c': ['1']})
df.set_index('customer_ID',drop=False)
df
我认为,@JD Long暗示的答案是在seprate指令中设置索引:
In[1]: df = pd.DataFrame(columns = ['customer_ID','a','b','c'])
In[2]: df.set_index('customer_ID',inplace = True)
In[3]: df
Out[3]:
Empty DataFrame
Columns: [customer_ID, a, b, c]
Index: []
然后,我可以添加行:
In[4]: id='x123'
In[5]: df.loc[id]=[id,4,5,6]
In[6]: df
Out[7]:
customer_ID a b c
x123 x123 4.0 5.0 6.0
不,我不希望数据帧中有行-我希望它为空。稍后我将在循环中填充它:一次添加一行通常是一个坏主意。每次这样做时,pandas都必须为整个数据帧制作一个新的副本,这将为您提供O(N^2)性能。有趣的评论-我正在迭代一个包含csv文件的文件夹,处理每个文件,并提取有关客户的关键统计信息,并将其添加到df中。另一种方法是使用完整的客户列表作为索引和空数据创建df,然后一次填写一行数据。这会避免复制吗?df.set_index('customer_ID')行没有效果,因为它不会更改
df
对象,而是返回一个新的数据帧。您需要使用inplace=True。对我来说,这仅在我使用df.loc[id]=[4,5,6]
而不是df.loc[id]=[id,4,5,6]
时有效。当索引将其从“列”中删除时,似乎设置了“id”。