是否可以在不先创建列表的情况下将Series附加到DataFrame行?

O.r*_*rka 35 python machine-learning series dataframe pandas

我有一些数据我试图组织成一个DataFramePandas.我试图让每一行成为一个Series并将其附加到DataFrame.我发现了一种通过附加去做Series一个空list,然后转换listSeriesDataFrame

例如 DF = DataFrame([series1,series2],columns=series1.index)

listDataFrame一步似乎过度.我在这里查看了几个例子,但是没有Series保留Index标签Series来将它们用作列标签.

列为id_names且行为type_names的路径很长: 在此输入图像描述

是否可以在不先创建列表的情况下将Series附加到DataFrame行?

#!/usr/bin/python

DF = DataFrame()
for sample,data in D_sample_data.items():
    SR_row = pd.Series(data.D_key_value)
    DF.append(SR_row)
DF.head()

TypeError: Can only append a Series if ignore_index=True or if the Series has a name
Run Code Online (Sandbox Code Playgroud)

然后我试了一下

DF = DataFrame()
for sample,data in D_sample_data.items():
    SR_row = pd.Series(data.D_key_value,name=sample)
    DF.append(SR_row)
DF.head()
Run Code Online (Sandbox Code Playgroud)

空DataFrame

尝试向pandas dataframe插入一行 仍然获得一个空的数据帧:/

我试图将Series作为行,其中Series的索引成为DataFrame的列标签

Ana*_*mar 55

也许一个更简单的方法是添加pandas.Seriespandas.DataFrameignore_index=True参数DataFrame.append().示例 -

DF = DataFrame()
for sample,data in D_sample_data.items():
    SR_row = pd.Series(data.D_key_value)
    DF = DF.append(SR_row,ignore_index=True)
Run Code Online (Sandbox Code Playgroud)

演示 -

In [1]: import pandas as pd

In [2]: df = pd.DataFrame([[1,2],[3,4]],columns=['A','B'])

In [3]: df
Out[3]:
   A  B
0  1  2
1  3  4

In [5]: s = pd.Series([5,6],index=['A','B'])

In [6]: s
Out[6]:
A    5
B    6
dtype: int64

In [36]: df.append(s,ignore_index=True)
Out[36]:
   A  B
0  1  2
1  3  4
2  5  6
Run Code Online (Sandbox Code Playgroud)

您的代码中的另一个问题是它DataFrame.append()不是就地,它返回附加的数据帧,您需要将其分配回原始数据帧才能使其正常工作.示例 -

DF = DF.append(SR_row,ignore_index=True)
Run Code Online (Sandbox Code Playgroud)

要保留标签,可以使用解决方案包含系列的名称以及将附加的DataFrame分配回DF.示例 -

DF = DataFrame()
for sample,data in D_sample_data.items():
    SR_row = pd.Series(data.D_key_value,name=sample)
    DF = DF.append(SR_row)
DF.head()
Run Code Online (Sandbox Code Playgroud)

  • **警告**: df.append 现已弃用,您应该尝试使用 pd.concat 安装 (7认同)
  • 啊伙计,谢谢!我没有捕获DF = DF.append()这与列表追加不同.对不起,我错过了. (6认同)
  • 你可以使用你的`name`解决方案`DF = DF.append(SR_row)`.使用该示例更新了答案. (2认同)

小智 17

append 已弃用,因此最好的选择是 to_frame().T

df1 = pd.DataFrame({'name':['john','mark'],'job':['manager','salesman'],'age':[43,23]})
ser1 = df1.iloc[-1]
pd.concat([df1,ser1.to_frame().T],ignore_index=True)

   name       job age
0  john   manager  43
1  mark  salesman  23
2  mark  salesman  23
Run Code Online (Sandbox Code Playgroud)


Bre*_*arn 13

DataFrame.append不会修改DataFrame.df = df.append(...)如果要将其重新分配给原始变量,则需要执行此操作.

  • 这是与 Python 正常行为的偏差,值得始终牢记。 (2认同)

Sel*_*lah 7

像这样的东西可以工作......

mydf.loc['newindex'] = myseries
Run Code Online (Sandbox Code Playgroud)

这是我使用它的一个例子......

stats = df[['bp_prob', 'ICD9_prob', 'meds_prob', 'regex_prob']].describe()

stats
Out[32]: 
          bp_prob   ICD9_prob   meds_prob  regex_prob
count  171.000000  171.000000  171.000000  171.000000
mean     0.179946    0.059071    0.067020    0.126812
std      0.271546    0.142681    0.152560    0.207014
min      0.000000    0.000000    0.000000    0.000000
25%      0.000000    0.000000    0.000000    0.000000
50%      0.000000    0.000000    0.000000    0.013116
75%      0.309019    0.065248    0.066667    0.192954
max      1.000000    1.000000    1.000000    1.000000

medians = df[['bp_prob', 'ICD9_prob', 'meds_prob', 'regex_prob']].median()

stats.loc['median'] = medians

stats
Out[36]: 
           bp_prob   ICD9_prob   meds_prob  regex_prob
count   171.000000  171.000000  171.000000  171.000000
mean      0.179946    0.059071    0.067020    0.126812
std       0.271546    0.142681    0.152560    0.207014
min       0.000000    0.000000    0.000000    0.000000
25%       0.000000    0.000000    0.000000    0.000000
50%       0.000000    0.000000    0.000000    0.013116
75%       0.309019    0.065248    0.066667    0.192954
max       1.000000    1.000000    1.000000    1.000000
median    0.000000    0.000000    0.000000    0.013116
Run Code Online (Sandbox Code Playgroud)


tml*_*dwn 5

将系列转换为数据帧并转置,然后正常追加。

srs = srs.to_frame().T
df = df.append(srs)
Run Code Online (Sandbox Code Playgroud)