为了账号安全,请及时绑定邮箱和手机立即绑定

Python Pandas:逐行填充数据框

Python Pandas:逐行填充数据框

白猪掌柜的 2021-03-28 12:10:59
向pandas.DataFrame对象添加一行的简单任务似乎很难完成。有3个与此相关的stackoverflow问题,没有一个给出有效的答案。这就是我想要做的。我有一个DataFrame,我已经知道它的形状以及行和列的名称。>>> df = pandas.DataFrame(columns=['a','b','c','d'], index=['x','y','z'])>>> df     a    b    c    dx  NaN  NaN  NaN  NaNy  NaN  NaN  NaN  NaNz  NaN  NaN  NaN  NaN现在,我有一个函数来迭代计算行的值。如何用字典或a填充行之一pandas.Series?这是各种失败的尝试:>>> y = {'a':1, 'b':5, 'c':2, 'd':3} >>> df['y'] = yAssertionError: Length of values does not match length of index显然,它试图添加一列而不是一行。>>> y = {'a':1, 'b':5, 'c':2, 'd':3} >>> df.join(y)AttributeError: 'builtin_function_or_method' object has no attribute 'is_unique'非常无信息的错误消息。>>> y = {'a':1, 'b':5, 'c':2, 'd':3} >>> df.set_value(index='y', value=y)TypeError: set_value() takes exactly 4 arguments (3 given)显然,这仅用于设置数据框中的各个值。>>> y = {'a':1, 'b':5, 'c':2, 'd':3} >>> df.append(y)Exception: Can only append a Series if ignore_index=True好吧,我不想忽略索引,否则结果如下:>>> df.append(y, ignore_index=True)     a    b    c    d0  NaN  NaN  NaN  NaN1  NaN  NaN  NaN  NaN2  NaN  NaN  NaN  NaN3    1    5    2    3它确实使列名与值对齐,但是丢失了行标签。>>> y = {'a':1, 'b':5, 'c':2, 'd':3} >>> df.ix['y'] = y>>> df                                  a                                 b  \x                               NaN                               NaNy  {'a': 1, 'c': 2, 'b': 5, 'd': 3}  {'a': 1, 'c': 2, 'b': 5, 'd': 3}z                               NaN                               NaN                                  c                                 dx                               NaN                               NaNy  {'a': 1, 'c': 2, 'b': 5, 'd': 3}  {'a': 1, 'c': 2, 'b': 5, 'd': 3}z                               NaN                               NaN那也失败了。你是怎么做到的 ?
查看完整描述

3 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

df['y'] 将设置一列


由于您要设置行,请使用 .loc


请注意,这.ix等效于您,您的失败了,因为您尝试为该行的每个元素分配一个字典,y可能不是您想要的。转换为Series会告诉熊猫您要对齐输入(例如,您不必指定所有元素)


In [7]: df = pandas.DataFrame(columns=['a','b','c','d'], index=['x','y','z'])


In [8]: df.loc['y'] = pandas.Series({'a':1, 'b':5, 'c':2, 'd':3})


In [9]: df

Out[9]: 

     a    b    c    d

x  NaN  NaN  NaN  NaN

y    1    5    2    3

z  NaN  NaN  NaN  NaN


查看完整回答
反对 回复 2021-04-01
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

我的方法是,但是我不能保证这是最快的解决方案。


df = pd.DataFrame(columns=["firstname", "lastname"])

df = df.append({

     "firstname": "John",

     "lastname":  "Johny"

      }, ignore_index=True)


查看完整回答
反对 回复 2021-04-01
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

这是一个简单的版本


import pandas as pd

df = pd.DataFrame(columns=('col1', 'col2', 'col3'))

for i in range(5):

   df.loc[i] = ['<some value for first>','<some value for second>','<some value for third>']`



查看完整回答
反对 回复 2021-04-01
  • 3 回答
  • 0 关注
  • 362 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信