Gle*_*enn 156 python dataframe pandas data-munging data-wrangling
我经常使用以下方法将单行附加到数据帧。我真正喜欢它的一件事是它允许您附加一个简单的 dict 对象。例如:
# Creating an empty dataframe
df = pd.DataFrame(columns=['a', 'b'])
# Appending a row
df = df.append({ 'a': 1, 'b': 2 }, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)
同样,我最喜欢的一点是代码非常干净并且只需要很少的行。现在我想推荐的替代方案是:
# Create the new row as its own dataframe
df_new_row = pd.DataFrame({ 'a': [1], 'b': [2] })
df = pd.concat([df, df_new_row])
Run Code Online (Sandbox Code Playgroud)
因此,之前的一行代码现在变成了两行,其中包含一个一次性变量和额外的内容,我在其中创建新的数据框。:( 有没有一种好方法可以做到这一点,只需使用像我过去那样的字典(未弃用)?
jsb*_*eno 68
如果需要的话,使用字典创建一个列表,然后使用df = pd.DataFrame.from_records(your_list)
. List 的“append”方法非常高效,并且永远不会被弃用。另一方面,由于其设计原因,数据帧经常需要重新创建并将所有数据复制到附加上 - 这就是他们不推荐使用该方法的原因
Raf*_*tan 67
我也喜欢追加方法。但你可以用一系列字典来完成
df = pd.concat([df, pd.DataFrame.from_records([{ 'a': 1, 'b': 2 }])])
Run Code Online (Sandbox Code Playgroud)
或使用 loc 和元组作为具有增量升序索引的 DataFrame 上的值
df.loc[len(df), ['a','b']] = 1, 2
Run Code Online (Sandbox Code Playgroud)
或者可能
df.loc[len(df), df.columns] = 3, 4
Run Code Online (Sandbox Code Playgroud)
小智 35
如果你想改用concat
:
append
outputxlsx = outputxlsx.append(df, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)
concat
outputxlsx = pd.concat([outputxlsx, df], ignore_index=True)
Run Code Online (Sandbox Code Playgroud)
DrM*_*key 10
对于那些像我一样想要描述性功能而不是大量俏皮话的人来说,这里有一个基于上面@Rafael Gaitan 的选项。
def append_dict_to_df(df, dict_to_append):
df = pd.concat([df, pd.DataFrame.from_records([dict_to_append])])
return df
# Creating an empty dataframe
df = pd.DataFrame(columns=['a', 'b'])
# Appending a row
df = append_dict_to_df(df,{ 'a': 1, 'b': 2 })
Run Code Online (Sandbox Code Playgroud)
我面临着类似的问题。其他解决方案并不真正适合我。我将这个答案留在这里作为处理该问题的额外可能性,因为这是某些搜索的第一个谷歌结果,而我自己至少是第二次在这里结束。
就我而言,数据不是字典,而只是一组已知参数的值列表。我想将参数值作为行添加到数据帧中,因为这样我可以通过 df[parameter] 访问一个参数的一系列所有值。
我从一个空的 DataFrame 开始:
parameters = ['a', 'b', 'c', 'd', 'e', 'f']
df = pd.DataFrame(columns=parameters)
Run Code Online (Sandbox Code Playgroud)
df:
a b c d e f
Run Code Online (Sandbox Code Playgroud)
通过追加,我可以非常方便地添加行,如下所示:
new_row = pd.Series([1,2,3,4,5,6], index=parameters, name='row1')
df.append(new_row)
Run Code Online (Sandbox Code Playgroud)
df:
a b c d e f
row1 1 2 3 4 5 6
Run Code Online (Sandbox Code Playgroud)
使用 pd.concat 我发现它以非常相似的方式提供相同的结果:
new_row = pd.DataFrame([1,2,3,4,5,6], columns=['row1'], index=parameters).T
df = pd.concat((df, new_row))
Run Code Online (Sandbox Code Playgroud)
关键是从一维数据创建一个 (1,n) 数据帧,然后转置它以匹配其他数据帧。
归档时间: |
|
查看次数: |
192349 次 |
最近记录: |