基于DataFrame子切片及列名初始化新DataFrame,切片后显示列名而非索引
Pandas 问题解答
1. 从另一个DataFrame的子切片及其列名初始化新DataFrame
分两种常见场景来处理:
场景一:直接从原DataFrame切取部分行列生成新DataFrame
如果你已经明确要选取的行和列范围,直接用loc(按标签)或iloc(按位置)切片后赋值即可,新DataFrame会自动继承对应列的列名:
import pandas as pd # 原DataFrame示例 original_df = pd.DataFrame({ 'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35], 'City': ['New York', 'London', 'Paris'] }) # 切取前2行,以及'Age'和'City'列生成新DataFrame new_df = original_df.loc[:1, ['Age', 'City']] print(new_df)
输出会自动保留列名:
Age City 0 25 New York 1 30 London
场景二:用单独的子切片数据和列名构造新DataFrame
如果你手里已经有了子切片的原始数据(比如从原DataFrame提取的values),以及对应的列名列表,直接用pd.DataFrame构造函数传入参数即可:
# 从原DataFrame提取的子切片数据 sub_data = original_df.loc[:1, ['Age', 'City']].values # 自定义列名 col_names = ['UserAge', 'UserCity'] # 构造新DataFrame new_df = pd.DataFrame(data=sub_data, columns=col_names) print(new_df)
输出:
UserAge UserCity 0 25 New York 1 30 London
2. 按数组指定的索引切片列后,显示列名而非索引
作为新手,你可能担心用列位置索引切片后看不到列名?其实iloc切片列后,生成的子DataFrame会自动保留原列名,举个实际例子:
# 原DataFrame示例 df = pd.DataFrame({ 'Name': ['Alice', 'Bob'], 'Age': [25, 30], 'City': ['NY', 'LA'], 'Score': [90, 85] }) # 用数组指定列的位置索引(比如第2和第4列,索引从0开始) cols_index = [1, 3] # 切片列 subset_df = df.iloc[:, cols_index] print(subset_df)
输出会清晰显示列名:
Age Score 0 25 90 1 30 85
如果遇到列名被省略的情况(比如列数过多),可以手动调整Pandas的显示设置确保列名可见:
# 强制显示所有列名,避免被省略 pd.set_option('display.max_columns', None) print(subset_df)
要是你需要单独提取列名列表展示,直接调用columns属性即可:
print("当前子DataFrame的列名:", subset_df.columns.tolist())
输出:当前子DataFrame的列名: ['Age', 'Score']
内容的提问来源于stack exchange,提问作者user7648646
相关产品推荐
相关产品推荐

