web-dev-qa-db-ja.com

最初にリストを作成せずに、DataFrameの行にシリーズを追加することは可能ですか?

DataFramePandasに整理しようとしているデータがあります。各行をSeriesにして、DataFrameに追加しようとしていました。 Seriesを空のlistに追加し、listSeriesDataFrameに変換する方法を見つけました。

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

このlistからDataFrameへのステップは過剰なようです。ここでいくつかの例をチェックアウトしましたが、SeriesのどれもIndexSeriesラベルを保持せず、それらを列ラベルとして使用します。

列がid_namesで行がtype_namesである私の長い道のり: enter image description here

最初にリストを作成せずに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()

空のデータフレーム

試した pandasデータフレームに行を挿入 まだ空のデータフレームを取得しています:/

シリーズを行にしようとしていますが、シリーズのインデックスはDataFrameの列ラベルになります

33
O.rka

たぶん簡単な方法は、pandas.Seriespandas.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

コードのもう1つの問題は、 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()
51
Anand S Kumar

DataFrame.append は、所定の位置にあるDataFrameを変更しません。元の変数に再割り当てする場合は、df = df.append(...)を実行する必要があります。

12
BrenBarn

このような何かが動作する可能性があります...

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

このコマンドを使用してみてください。以下の例を参照してください。

Before image

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

df

After Image