当前位置: 首页 > 知识库问答 >
问题:

Python熊猫:逐行填充数据帧

万俟均
2023-03-14

熊猫添加行的简单任务。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

现在,我有了一个迭代计算行值的函数。我如何用字典或pandas填充其中一行。系列?以下是失败的各种尝试:

>>> 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

这也惨遭失败。

那你怎么做呢?

共有3个答案

李经国
2023-03-14

这是一个更简单的版本

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>']`
扶文光
2023-03-14

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

df = pd.DataFrame(columns=["firstname", "lastname"])
df = df.append({
     "firstname": "John",
     "lastname":  "Johny"
      }, ignore_index=True)
姚钊
2023-03-14

df['y']将设置一列

由于要设置行,请使用。loc

请注意,。ix在这里是等效的,您的失败是因为您试图为行y的每个元素分配一个字典,这可能不是您想要的;转换为系列会告诉pandas您希望对齐输入(例如,您不必指定所有元素)

In [6]: import pandas as pd

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

In [8]: df.loc['y'] = pd.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
 类似资料:
  • 问题内容: 如果我有一个包含多列的数据框,如何只填充一列?还是一组列? 我只知道如何按轴进行操作。 问题答案: tl; dr: 我还添加了一个自我包含的示例:

  • 然后,我会添加初始值,然后查看这个数据,从前面的行计算新行,例如左右。 我目前使用的代码如下所示,但我觉得它有点难看,必须有一种方法直接使用DataFrame来实现这一点,或者只是一种更好的方法。注意:我使用的是Python2.7。

  • 我从熊猫数据帧文档开始:数据结构简介 我想在一个时间序列类型的计算中迭代地填充数据帧。所以基本上,我想用列A、B和时间戳行初始化数据帧,全0或全NaN。 然后,我会添加初始值并检查这些数据,根据之前的行计算新行,比如说< code > row[A][t]= row[A][t-1]1 左右。 我目前正在使用下面的代码,但我觉得它有点难看,必须有一种方法直接用数据帧来做这件事,或者一般来说是一种更好的

  • 我有两个Dataframes一个与日期集(df1)和另一个与emp_ids集(df2)。我试图创建一个新的Dataframe,这样df2中的每个emp_id都被标记为df1中的每个日期。 下面给出了我的数据帧的外观 df1 df2 预期产出: 我将日期列转换为字符串,并尝试执行以下操作,但返回的数据框为空 我尝试做

  • 假设我有以下数据。 我想用以前的值填充缺少的日期(按字段“g”分组)。例如,我想在上面的示例中添加以下主菜: 我该怎么做呢?

  • 这似乎是非常基本的知识,但我还是卡住了,尽管我有一些数据处理的理论背景(通过其他软件)。值得一提的是,我是蟒蛇和熊猫图书馆的新手。 我的任务是将系列名称列的值作为单独的列(从长到宽转换)。我花了很长时间尝试不同的方法,但只有错误。 例如: 我犯了一个错误: ...很多短信...通过值的长度是2487175,索引暗示2 有谁能指导我完成这个过程吗?谢谢 它用于代码“mydata=mydata”。pi