Appending a list or series to a pandas DataFrame as a row?
因此,我已经初始化了一个空的pandas数据帧,我想在这个数据帧中迭代地将列表(或序列)附加为行。最好的方法是什么?
有时,在熊猫外部执行所有附加操作会更容易,然后,只需一次创建数据帧。
1 2 3 4 5 6 7 | >>> import pandas as pd >>> simple_list=[['a','b']] >>> simple_list.append(['e','f']) >>> df=pd.DataFrame(simple_list,columns=['col1','col2']) col1 col2 0 a b 1 e f |
下面是一个简单而愚蠢的解决方案:
1 2 3 | >>> import pandas as pd >>> df = pd.DataFrame() >>> df = df.append({'foo':1, 'bar':2}, ignore_index=True) |
号
1 2 | df = pd.DataFrame(columns=list("ABC")) df.loc[len(df)] = [1,2,3] |
。
你能这样做吗?
1 2 3 4 5 6 7 8 | >>> import pandas as pd >>> df = pd.DataFrame(columns=['col1', 'col2']) >>> df = df.append(pd.Series(['a', 'b'], index=['col1','col2']), ignore_index=True) >>> df = df.append(pd.Series(['d', 'e'], index=['col1','col2']), ignore_index=True) >>> df col1 col2 0 a b 1 d e |
有人有更优雅的解决方案吗?
跟随迈克·奇里科的回答…如果要在数据帧已填充后附加列表…
1 2 3 4 5 6 7 | >>> list = [['f','g']] >>> df = df.append(pd.DataFrame(list, columns=['col1','col2']),ignore_index=True) >>> df col1 col2 0 a b 1 d e 2 f g |
。
这里有一个函数,给定一个已经创建的数据帧,它将把一个列表作为新行附加。这可能会抛出错误捕捉器,但如果您确切知道要添加什么,那么它不应该是一个问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import pandas as pd import numpy as np def addRow(df,ls): """ Given a dataframe and a list, append the list as a new row to the dataframe. :param df: <DataFrame> The original dataframe :param ls: <list> The new row to be added :return: <DataFrame> The dataframe with the newly appended row """ numEl = len(ls) newRow = pd.DataFrame(np.array(ls).reshape(1,numEl), columns = list(df.columns)) df = df.append(newRow, ignore_index=True) return df |
。
如果要添加序列并将序列的索引用作数据帧的列,则只需在括号之间追加序列:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | In [1]: import pandas as pd In [2]: df = pd.DataFrame() In [3]: row=pd.Series([1,2,3],["A","B","C"]) In [4]: row Out[4]: A 1 B 2 C 3 dtype: int64 In [5]: df.append([row],ignore_index=True) Out[5]: A B C 0 1 2 3 [1 rows x 3 columns] |
如果去掉
最简单的方法:
1 2 | my_list = [1,2,3,4,5] df['new_column'] = pd.Series(my_list).values |
。
编辑:
不要忘记新列表的长度应该与对应的数据帧的长度相同。
只需使用loc:
1 2 3 4 5 6 7 8 | >>> df A B C one 1 2 3 >>> df.loc["two"] = [4,5,6] >>> df A B C one 1 2 3 two 4 5 6 |