Можно ли добавлять серию в строки DataFrame, не делая сначала списка?
У меня есть некоторые данные, которые я пытаюсь организовать в DataFrame
в Pandas
. Я пытался сделать каждую строку Series
и добавить ее в DataFrame
. Я нашел способ сделать это, добавив Series
в пустой list
и затем преобразовывая list
Series
в DataFrame
например DF = DataFrame([series1,series2],columns=series1.index)
Этот list
на шаге DataFrame
кажется чрезмерным. Здесь я рассмотрел несколько примеров, но ни одна из Series
сохранила метки Index
из Series
чтобы использовать их в качестве меток столбцов.
Мой длинный путь, где столбцы - id_names, а строки - type_names:
Можно ли добавлять серию в строки 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
Пробовал Вставить строку в pandas dataframe По-прежнему получать пустой фреймворк:/
Я пытаюсь получить Series как строки, где индекс Series становится меткой столбца DataFrame
Ответы
Ответ 1
Может быть, проще будет добавить 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()
Ответ 2
DataFrame.append
не изменяет DataFrame на месте. Вам нужно сделать df = df.append(...)
если вы хотите переназначить его обратно исходной переменной.
Ответ 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
Ответ 4
Попробуйте использовать эту команду. См. Пример ниже:
df.loc[len(df)] = ['Product 9',99,9.99,8.88,1.11]
df