index 参数指定行标签。例如键 '平安科技'、'南方通信'、'幸福银行' 即为三列的列名。drop() 方法删除行或列时,默认会直接修改原始数据框。 答案:× 解析: drop() 默认生成一个新对象,不修改原始对象。只有指定 inplace=True 才会直接修改原始对象。index 提供行标签;从二维列表创建时用 index 和 columns 分别指定。index 指定行标签 B. 可从二维列表创建,二维列表的元素成为行数据 C. 从二维列表创建时,用 index 指定行标签、用 columns 指定列标签 D. 从字典创建时,字典的键成为行标签 答案:ABC 解析: 课程给出两种常用方法。D 错误:从字典创建时键成为列标签,不是行标签。import pandas as pd
from pandas import DataFrame
data = {'平安科技':[45.2,47.1,46.5,49.8], '南方通信':[31.9,27.3,25.2,24.5], '幸福银行':[3.4,4.6,5.2,6.8]}
df = DataFrame(data, index=['2024-01','2024-02','2024-03','2024-04'])
new_row = pd.DataFrame({'平安科技':45.6, '南方通信':26.4, '幸福银行':5.8}, index=['2024-05'])
df2 = pd.concat([df, new_row])
print(len(df))
print(len(df2))
print(df2.loc['2024-05', '幸福银行'])
A. 4、5、5.8 B. 5、5、5.8 C. 4、4、报错(原对象未追加成功) D. 5、5、3.4 答案:A 解析: pandas 2.x 用 concat() 在末尾追加新行,新行本身也是一个数据框。concat 返回新对象 df2(5 行),不修改 df(仍为 4 行)。新行标签 2024-05 对应「幸福银行」的值为 5.8。
from pandas import DataFrame
data = [[45.2,31.9,3.4], [47.1,27.3,4.6], [46.5,25.2,5.2], [49.8,24.5,6.8]]
col = ['平安科技', '南方通信', '幸福银行']
ind = ['2024-01','2024-02','2024-03','2024-04']
df = DataFrame(data, columns=col, index=ind)
df['三一重工'] = [14.2, 15.6, 17.8, 16.5]
print(list(df.columns))
A. ['平安科技', '南方通信', '幸福银行'](赋值不能增加列) B. ['平安科技', '南方通信', '幸福银行', '三一重工'] C. 因列表长度必须与列数相同而报错 D. ['三一重工'](原列被覆盖) 答案:B 解析: 增加新列的格式为 对象['新列名'] = 数据,数据可以是列表,长度要与原对象的行数相同(此处为 4)。该赋值在原数据框上直接增加一列,不覆盖已有列。
drop() 方法,下列说法正确的有: A. 删除行时标签名为行标签,axis 为 0 或者不提供该参数 B. 删除列时标签名为列标签,axis 为 1 C. 不指定 axis 时默认删除列 D. inplace=True 直接修改原始对象,否则生成一个新对象 答案:ABD 解析: 例如 df.drop('2024-02') 删除一行;df.drop('幸福银行', axis=1) 删除一列。不提供 axis 时按行删除,不是按列。C 错误。concat() 方法在数据框末尾追加新行。 答案:√ 解析: 课程对照两个版本:2.x 使用 concat();1.x 可通过 append() 追加。append() 在较新版本中已移除,当前环境应优先使用 concat()。import pandas as pd
data = {'姓名': ['张军', '王怡', '李和'], '年龄': [25, 30, 25], '体重':[67, 82, 76]}
df = pd.DataFrame(data)
print(df.sort_values(by=['年龄', '体重']))
A. 王怡(先按体重,82 最大故排最前) B. 李和(年龄 25 且体重 76,按课件示例顺序) C. 张军(先按年龄升序,年龄同为 25 时再按体重升序,67 小于 76) D. 因 by 不能传入列表而报错 答案:C 解析: sort_values() 可按多列排序,默认升序。by=['年龄','体重'] 表示先按年龄、年龄相同再按体重。张军与李和年龄均为 25,张军体重 67 小于李和 76,故第一行为张军,其次李和,最后王怡(年龄 30)。sort_values 返回新对象,不修改 df。
2024-01 至 2024-04,列标签为平安科技、南方通信、幸福银行,数值与课程示例一致),再增加一列「三一重工」,值为 [14.2, 15.6, 17.8, 16.5],并打印数据框。 答案:from pandas import DataFrame
data = {'平安科技':[45.2,47.1,46.5,49.8], '南方通信':[31.9,27.3,25.2,24.5], '幸福银行':[3.4,4.6,5.2,6.8]}
df = DataFrame(data, index=['2024-01','2024-02','2024-03','2024-04'])
df['三一重工'] = [14.2, 15.6, 17.8, 16.5]
print(df)
解析: 评分要点:① 用字典创建且键为列标签;② index 指定四个月份行标签;③ 用 对象['新列名']=列表 增加列,列表长度与行数相同。用二维列表加 columns、index 创建也可给满分。
pd.concat([df, new_row]) 之后,原对象 df 是否已包含 2024-05?(2)若要删除列「幸福银行」且不修改 df,应如何调用 drop()?(3)sort_values(by='体重', ascending=False) 的第一行是谁?pandas 1.x 若用字典调用 append() 且未设 ignore_index=True,会有什么问题?import pandas as pd
from pandas import DataFrame
data = {'平安科技':[45.2,47.1], '南方通信':[31.9,27.3], '幸福银行':[3.4,4.6]}
df = DataFrame(data, index=['2024-01','2024-02'])
new_row = pd.DataFrame({'平安科技':45.6, '南方通信':26.4, '幸福银行':5.8}, index=['2024-05'])
print(pd.concat([df, new_row]))
print(df)
info = {'姓名': ['张军', '王怡', '李和'], '年龄': [25, 30, 25], '体重':[67, 82, 76]}
sdf = pd.DataFrame(info)
print(sdf.sort_values(by='体重', ascending=False))
答案: (1)不包含。concat() 返回新数据框,不修改 df;要保留追加结果需赋值,如 df = pd.concat([df, new_row])。 (2)df.drop('幸福银行', axis=1)。删列必须 axis=1;不设 inplace=True 则返回新对象、原 df 不变。 (3)第一行是王怡(体重 82 最大,降序)。1.x 用字典 append() 时,必须设置 ignore_index=True 才能自动生成新行索引;否则无法把无行标签的字典对接到原索引上。设置后新对象的行标签会被重建为 0、1、2…。 解析: 评分要点:① 说明 concat/append 默认不改原对象,需赋值;② 删列必须 axis=1;③ 降序按体重,王怡在前;④ 点明 1.x 字典 append 需要 ignore_index=True 且会重建行标签。四点答全给满分。