Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Cách thêm hàng mới vào DataFrame Pandas bằng Template (mẫu)

Giới thiệu

Là chuyên gia dữ liệu, tôi thường tạo cột dẫn xuất hơn là thêm hàng. Nhưng đôi khi cần tạo hàng mẫu thay vì chờ team dữ liệu. Bài viết trình bày thủ thuật thêm hàng hiệu quả.

Cách thực hiện

1. Tạo DataFrame ban đầu


import pandas as pd
import numpy as np

players_info = pd.DataFrame(data=[
    {"players": "Roger Federer", "titles": 20},
    {"players": "Rafael Nadal", "titles": 20},
    {"players": "Novak Djokovic", "titles": 17},
    {"players": "Andy Murray", "titles": 3}
], columns=["players", "titles"])

2. Thêm hàng với .loc (thay đổi tại chỗ - in place)


# Thêm list
new_Player = ['Dominic Theim', 1]
players_info.loc[4] = new_Player

# Thêm dict
new_player = {'players': 'Daniel Medvedev', 'titles': 0}
players_info.loc[len(players_info)] = new_player

# Thêm Series
players_info.loc[len(players_info)] = pd.Series({'players': 'Andy Zverev', 'titles': 0})

print(players_info)

Kết quả: DataFrame mở rộng 7 hàng, index tự động tăng.

Lưu ý: .loc sửa đổi DataFrame gốc (in-place).

3. Thêm hàng với .append (trả về bản sao mới)

.append không sửa DataFrame gốc, trả về DataFrame mới. Tham số đầu tiên phải là DataFrame, Series, dict, hoặc list.


# DataFrame có index tùy chỉnh
players_info = pd.DataFrame(data=[...], index=['roger', 'nadal', 'djokovic', 'murray'])

# Thêm dict - CẦN ignore_index=True
new_df = players_info.append({'players': 'Daniel Medvedev', 'titles': 0}, ignore_index=True)

Nếu không dùng ignore_index=True, sẽ lỗi TypeError: Can only append a Series if ignore_index=True or if the Series has a name.

Khi dùng ignore_index=True, index cũ bị loại bỏ, thay bằng RangeIndex(0, n).

4. Thêm nhiều hàng cùng lúc


player1 = pd.Series({'players': 'Andy Zverev', 'titles': 0}, name='zverev')
player2 = pd.Series({'players': 'Dominic Theim', 'titles': 1}, name='theim')
new_df_1 = players_info.append([player1, player2])

Kỹ thuật Template cho DataFrame nhiều cột

Với DataFrame nhiều cột (ví dụ: 12 cột phim), dễ gõ nhầm tên cột hoặc bỏ sót khi thêm hàng thủ công. Giải pháp: tạo template từ hàng đầu tiên.


# Đọc dữ liệu phim (12 cột)
df = pd.read_csv("https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv")

# Tạo template từ hàng đầu tiên
columns_dictionary = df.iloc[0].to_dict()
# {'budget': 237000000, 'id': 19995, 'original_language': 'en', ...}

Xóa giá trị cũ, giữ cấu trúc cột

Dùng dictionary comprehension: chuỗi → chuỗi rỗng, ngày → NaN, số → NaN.


import datetime

new_data_dict = {}
for a, b in columns_dictionary.items():
    if isinstance(b, str):
        new_data_dict[a] = np.random.choice(list('abcde'))  # Chuỗi mẫu ngẫu nhiên
    elif isinstance(b, datetime.date):
        new_data_dict[a] = np.nan
    else:
        new_data_dict[a] = np.nan

print(new_data_dict)

Kết quả template:


{'budget': nan, 'id': nan, 'original_language': 'e', 'original_title': 'a',
 'popularity': nan, 'release_date': 'b', 'revenue': nan, 'runtime': nan,
 'status': 'e', 'title': 'c', 'vote_average': nan, 'vote_count': nan}

Dictionary này giờ là mẫu sẵn sàng để điền dữ liệu mới cho bất kỳ hàng nào, đảm bảo không thiếu cột.