Thêm một danh sách hoặc chuỗi vào DataFrame gấu trúc dưới dạng một hàng?


Câu trả lời:


132

Đôi khi, thực hiện tất cả các phụ kiện bên ngoài gấu trúc dễ dàng hơn, sau đó, chỉ cần tạo DataFrame trong một lần chụp.

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

22
Cách đặt tên biến không hợp lệ list. Bạn vừa ghi đè hàm listtạo.
Jason Strimpel

1
Câu hỏi dường như ngụ ý rằng không phải tất cả các hàng đều được biết trước.
DISC-O

103
df = pd.DataFrame(columns=list("ABC"))
df.loc[len(df)] = [1,2,3]

8
Đây là cách dễ nhất nếu bạn đang tìm cách thêm vào cuối df.
Sid

2
Đây chính xác là những gì tôi muốn, rất đơn giản nhưng hiệu quả!
MSalty

3
Tại sao đây không phải là câu trả lời được chọn?
Lucas Azevedo

Điều này nói chung là ổn nhưng chỉ hoạt động nếu bạn có chỉ số tăng đơn điệu bắt đầu ở mức 0.
dreab

59

Đây là một giải pháp đơn giản và ngu ngốc:

>>> import pandas as pd
>>> df = pd.DataFrame()
>>> df = df.append({'foo':1, 'bar':2}, ignore_index=True)

25
Lưu ý rằng điều này phụ thêm một dict, không phải là một danh sách
anthnyprschka

36

Bạn có thể làm một cái gì đó như thế này?

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

Có ai có một giải pháp thanh lịch hơn?


1
Đây là một giải pháp đơn giản và ngu ngốc: `` import pandas as pd df = pd.DataFrame () df = df.append ({'foo': 1, 'bar': 2}, ignore_index = True) # Lưu ý rằng phần nối này không xảy ra tại chỗ. ``
Jaidev Deshpande

27

Theo dõi câu trả lời của Mike Chirico ... nếu bạn muốn thêm một danh sách sau khi khung dữ liệu đã được điền ...

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

Nó có tạo ra một bản sao không? Có thể nối tại chỗ không?
lucid_dreamer

4

Nếu bạn muốn thêm Chuỗi và sử dụng chỉ mục của Chuỗi làm cột của DataFrame, bạn chỉ cần nối Chuỗi giữa các dấu ngoặc:

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]

Cho dù ignore_index=Truebạn không nhận được chỉ mục thích hợp.


4

Đây là một hàm, với một khung dữ liệu đã được tạo sẵn, sẽ thêm một danh sách dưới dạng một hàng mới. Điều này có thể sẽ có các trình bắt lỗi được đưa vào, nhưng nếu bạn biết chính xác những gì bạn đang thêm thì đó không phải là vấn đề.

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

3

Việc chuyển đổi danh sách thành khung dữ liệu trong hàm append cũng hoạt động khi được áp dụng trong một vòng lặp

import pandas as pd
mylist = [1,2,3]
df = pd.DataFrame()
df = df.append(pd.DataFrame(data[mylist]))

2

chỉ cần sử dụng loc:

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


0

Cách đơn giản nhất:

my_list = [1,2,3,4,5]
df['new_column'] = pd.Series(my_list).values

Biên tập:

Đừng quên rằng độ dài của danh sách mới phải bằng với Dataframe tương ứng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.