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

时间:2015-10-13 04:20:36

标签: python pandas machine-learning dataframe series

我正在尝试将一些数据整理到DataFrame中的Pandas。我试图将每一行设为Series并将其附加到DataFrame。我找到了一种方法,将Series添加到空list,然后将list Series转换为DataFrame

e.g。 DF = DataFrame([series1,series2],columns=series1.index)

listDataFrame步骤似乎过多。我在这里查看了几个示例,但Series没有一个保留Index中的Series标签,无法将它们用作列标签。

我的路很长,其中列是id_names,行是type_names: enter image description here

是否可以在没有首先列出列表的情况下将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

然后我试了

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

清空DataFrame

尝试Insert a row to pandas dataframe 仍然得到一个空的数据帧:/

我正在努力让系列成为行,其中系列的索引成为DataFrame的列标签

6 个答案:

答案 0 :(得分:42)

也许更简单的方法是将pandas.Series添加到pandas.DataFrame ignore_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)

演示 -

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

代码中的另一个问题是DataFrame.append()不在原地,它会返回附加的数据框,您需要将其分配回原始数据框才能生效。示例 -

DF = DF.append(SR_row,ignore_index=True)

要保留标签,您可以使用解决方案包含系列的名称,并将附加的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()

答案 1 :(得分:10)

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

答案 2 :(得分:3)

这样的事情可以起作用......

mydf.loc['newindex'] = myseries

以下是我使用它的例子......

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

答案 3 :(得分:1)

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

srs = srs.to_frame().T
df = df.append(srs)

答案 4 :(得分:0)

尝试使用此命令。请参阅下面给出的示例:

Before image

df.loc[len(df)] = ['Product 9',99,9.99,8.88,1.11]

df

After Image

答案 5 :(得分:0)

这也可以:

df = pd.DataFrame()
new_line = pd.Series({'A2M': 4.059, 'A2ML1': 4.28}, name='HCC1419')
df = df.append(new_line, ignore_index=False)

系列中的 name 将是数据帧中的索引。 ignore_index=False 是本例中的重要标志。