2013-05-29 32 views
22

Có cách nào để chỉ định chỉ mục mà tôi muốn cho một hàng mới hay không, khi thêm hàng vào một khung dữ liệu?Pandas: Gắn thêm một hàng vào một khung dữ liệu và chỉ định nhãn chỉ mục của nó

Các tài liệu gốc cung cấp the following example:

In [1301]: df = DataFrame(np.random.randn(8, 4), columns=['A','B','C','D']) 

In [1302]: df 
Out[1302]: 
      A   B   C   D 
0 -1.137707 -0.891060 -0.693921 1.613616 
1 0.464000 0.227371 -0.496922 0.306389 
2 -2.290613 -1.134623 -1.561819 -0.260838 
3 0.281957 1.523962 -0.902937 0.068159 
4 -0.057873 -0.368204 -1.144073 0.861209 
5 0.800193 0.782098 -1.069094 -1.099248 
6 0.255269 0.009750 0.661084 0.379319 
7 -0.008434 1.952541 -1.056652 0.533946 

In [1303]: s = df.xs(3) 

In [1304]: df.append(s, ignore_index=True) 
Out[1304]: 
      A   B   C   D 
0 -1.137707 -0.891060 -0.693921 1.613616 
1 0.464000 0.227371 -0.496922 0.306389 
2 -2.290613 -1.134623 -1.561819 -0.260838 
3 0.281957 1.523962 -0.902937 0.068159 
4 -0.057873 -0.368204 -1.144073 0.861209 
5 0.800193 0.782098 -1.069094 -1.099248 
6 0.255269 0.009750 0.661084 0.379319 
7 -0.008434 1.952541 -1.056652 0.533946 
8 0.281957 1.523962 -0.902937 0.068159 

nơi hàng mới được nhãn chỉ số tự động. Có cách nào để kiểm soát nhãn mới không?

Trả lời

26

Các name của Series trở thành index của hàng trong DataFrame:

In [99]: df = pd.DataFrame(np.random.randn(8, 4), columns=['A','B','C','D']) 

In [100]: s = df.xs(3) 

In [101]: s.name = 10 

In [102]: df.append(s) 
Out[102]: 
      A   B   C   D 
0 -2.083321 -0.153749 0.174436 1.081056 
1 -1.026692 1.495850 -0.025245 -0.171046 
2 0.072272 1.218376 1.433281 0.747815 
3 -0.940552 0.853073 -0.134842 -0.277135 
4 0.478302 -0.599752 -0.080577 0.468618 
5 2.609004 -1.679299 -1.593016 1.172298 
6 -0.201605 0.406925 1.983177 0.012030 
7 1.158530 -2.240124 0.851323 -0.240378 
10 -0.940552 0.853073 -0.134842 -0.277135 
+0

Cảm ơn @unutbu. Bạn có biết nếu phụ thêm trả về bản sao/chế độ xem/tham chiếu của khung dữ liệu gốc không? –

+5

Nó trả về một bản sao. Bạn có thể biết bằng cách làm 'df2 = df.append (s)', tiếp theo là 'df2.ix [0, 'A'] = 1000' và sau đó kiểm tra nếu' df' đã thay đổi. (Nó không.) – unutbu

+0

Nghệ thuật giảng dạy là sử dụng ví dụ đơn giản nhất sẽ truyền đạt sự hiểu biết (thông điệp tới nhiều người trên stackoverflow, không chỉ chọn một). Nhân tiện, xs là gì? – gseattle

10

df.loc sẽ thực hiện công việc:

>>> df = pd.DataFrame(np.random.randn(3, 2), columns=['A','B']) 
>>> df 
      A   B 
0 -0.269036 0.534991 
1 0.069915 -1.173594 
2 -1.177792 0.018381 
>>> df.loc[13] = df.loc[1] 
>>> df 
      A   B 
0 -0.269036 0.534991 
1 0.069915 -1.173594 
2 -1.177792 0.018381 
13 0.069915 -1.173594 
Các vấn đề liên quan