Python Pandas:逐行填充数据框

向pandas.DataFrame对象添加一行的简单任务似乎很难完成。有3个与此相关的stackoverflow问题,没有一个给出有效的答案。


这就是我想要做的。我有一个DataFrame,我已经知道它的形状以及行和列的名称。


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

>>> df

     a    b    c    d

x  NaN  NaN  NaN  NaN

y  NaN  NaN  NaN  NaN

z  NaN  NaN  NaN  NaN

现在,我有一个函数来迭代计算行的值。如何用字典或a填充行之一pandas.Series?这是各种失败的尝试:


>>> y = {'a':1, 'b':5, 'c':2, 'd':3} 

>>> df['y'] = y

AssertionError: 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    d

0  NaN  NaN  NaN  NaN

1  NaN  NaN  NaN  NaN

2  NaN  NaN  NaN  NaN

3    1    5    2    3

它确实使列名与值对齐,但是丢失了行标签。


>>> y = {'a':1, 'b':5, 'c':2, 'd':3} 

>>> df.ix['y'] = y

>>> df

                                  a                                 b  \

x                               NaN                               NaN

y  {'a': 1, 'c': 2, 'b': 5, 'd': 3}  {'a': 1, 'c': 2, 'b': 5, 'd': 3}

z                               NaN                               NaN


                                  c                                 d

x                               NaN                               NaN

y  {'a': 1, 'c': 2, 'b': 5, 'd': 3}  {'a': 1, 'c': 2, 'b': 5, 'd': 3}

z                               NaN                               NaN

那也失败了。


你是怎么做到的 ?


白猪掌柜的
浏览 363回答 3
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]: dfOut[9]:      a    b    c    dx  NaN  NaN  NaN  NaNy    1    5    2    3z  NaN  NaN  NaN  NaN

一只萌萌小番薯

我的方法是,但是我不能保证这是最快的解决方案。df = pd.DataFrame(columns=["firstname", "lastname"])df = df.append({     "firstname": "John",     "lastname":  "Johny"      }, ignore_index=True)

拉莫斯之舞

这是一个简单的版本import pandas as pddf = pd.DataFrame(columns=('col1', 'col2', 'col3'))for i in range(5):&nbsp; &nbsp;df.loc[i] = ['<some value for first>','<some value for second>','<some value for third>']`
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python