空DataFrame添加新值失败:仅生成列无数据的问题求助
解决空DataFrame添加值仅创建列无数据的问题
嘿,这个问题我之前处理过好几次!咱们先搞清楚为什么会出现这种情况:当你给一个空的DataFrame直接赋值单个值(比如'abc'或者单个日期字符串)时,pandas找不到对应的行来放置这个值——毕竟当前DataFrame的行数是0,单个值没办法和0行的长度匹配,所以它只会帮你创建列,但数据还是空的,形状就变成了(0, n)。
下面给你几种实用的解决办法,按需选就行:
方法1:直接创建带初始数据的DataFrame
如果是第一次构建DataFrame,直接用字典传入列表形式的数据(哪怕只有一个元素),这样pandas会自动识别为一行数据:
import pandas as pd from datetime import datetime unrealized_amt_df = pd.DataFrame({ 'Name': ['abc'], 'Date': [datetime.today().strftime('%Y-%m-%d')] })
执行后DataFrame的形状就是(1, 2),数据也正常显示啦。
方法2:用loc指定行添加数据
如果已经创建了空DataFrame(或者已有部分列),可以用loc指定行号来添加整行数据:
unrealized_amt_df = pd.DataFrame(columns=['Name', 'Date']) # 先创建带列的空DataFrame unrealized_amt_df.loc[0] = ['abc', datetime.today().strftime('%Y-%m-%d')]
这里loc[0]表示添加第一行,后续要加新行的话可以用loc[len(unrealized_amt_df)](自动获取下一个行号)来避免重复。
方法3:用pd.concat追加行(替代已弃用的append)
如果你需要后续批量追加数据,推荐用pd.concat,因为pandas 2.0之后append方法已经被弃用了:
unrealized_amt_df = pd.DataFrame() # 构造要添加的单行数据(用列表包裹字典,确保是DataFrame格式) new_row = pd.DataFrame([{'Name': 'abc', 'Date': datetime.today().strftime('%Y-%m-%d')}]) # 合并到原DataFrame,ignore_index=True重置行号 unrealized_amt_df = pd.concat([unrealized_amt_df, new_row], ignore_index=True)
简单总结一下:核心是要让pandas明确你是要添加一行数据,而不是给0行的列赋值单个值——单个值无法匹配0行的长度,所以才会只创建列没数据。上面的方法都能帮你解决这个问题~
内容的提问来源于stack exchange,提问作者liga810
相关产品推荐
相关产品推荐

