单表操作
我将不加详细解释的,给出代码
数据读取
指定列读取
使用 usecols
参数可以在读取数据的时候,就指定读取的列
df = pd.read_csv('path_to_your_file.csv', usecols=columns_to_read)
df = pd.read_excel('path_to_your_file.xlsx', usecols=columns_to_read)
只读取列名
要在不加载整个数据集的情况 下仅读取 CSV
文件的列名,可以设置 nrows
参数
nrows
就是设置需要读取的行,0 行就是列名了
df = pd.read_csv('path_to_your_file.csv', nrows=0)
column_names = df.columns.tolist()
数据修改
修改列名
df.rename(columns={'id': '编号'}, inplace=True)
修改列类型
将浮点数的列改成整数
df['score'] = df['score'].astype(int)
修改日期格式 int -> str
这个操作也比较常见,比如有一列的日期是数字格式的 20220101 (因为如果从 Excel 里面读取到 pandas 中就会这样)
现在希望修改成类似 2022-01-01
,该怎么操作呢?
- 使用字符串操作 也就是将整数转换为字符串,并直接通过字符串切片添加分隔符:
df['date'] = df['date'].astype(str).str[:4] + '-' + df['date'].astype(str).str[4:6] + '-' + df['date'].astype(str).str[6:8]
当然,你要是想炫技,一行实现,也可以这样
df['date'] = df['date'].map(lambda x: str(x)[:4] + '-' + str(x)[4:6] + '-' + str(x)[6:8])
- 使用
pd.to_datetime()
将整数转换为日期类型,然后再格式化为所需的字符串格式。这种方法好处是可以处理实际日期的验证和格式化。
df['date'] = pd.to_datetime(df['date'].astype(str), format='%Y%m%d').dt.strftime('%Y-%m-%d')
修改日期格式 str -> int
这是上一个操作的镜像操作,怎么将一列字符串类型的日期(类似 2022-01-01),转换为数字?
df['date'].str.replace('-', '').astype(int)
修改顺序
根据 '序号' 列排序
df_sorted = df.sort_values(by='序号')
数据填充
使用某个固定值或根据其他数据计算得出的值来填充空值。
df.fillna(value=0, inplace=True) # 例如,用0填充所有空值
对于连续数值数据,可以使用插值方法来估算空值。
df.interpolate(method='linear', inplace=True) # 线性插值填充空值
数据删除
drop()
方法是最常用的删除列的方法。你可以指定要删除的列名和axis
参数,例如删除B
列
df = df.drop('B', axis=1)
或 者是删除包含空值的行
df.dropna(inplace=True)
如果你想直接在原始 DataFrame 上操作,可以使用 Python 的 del 关键字。
del df['B']
此外,pop()
方法除了删除列外,还可以返回被删除的列,这在需要使用被删除的数据时非常方便。
removed_column = df.pop('B')
修改索引
如果想将某一列添加到索引,可以使用如下代码
df = df.set_index('dt', append=True)
添加完之后如果需要删除,可以使用如下代码
df = df.reset_index('dt', drop=False)
也可以使用如下代码重置索引
df_sorted.reset_index(drop=True, inplace=True)
数据抽取
提取满足要求的列
提取前 100 列
df_subset = df.iloc[:, :100]
提取前 100 列和最后一列
column_indices = list(range(100)) + [-1] # 生成一个包含前 100 列和最后一列索引的列表
df_subset = df.iloc[:, column_indices]
提取指定列名的列,例如提取所有列名以 'd' 开头的列
df_d_columns = df[[col for col in df.columns if col.startswith('d')]]
提取满足条件的行
筛选出 df
中列 a
的所有值存在于列表 b
中的行
df[df['a'].isin(b)]
比较常用的一个场景是筛选出 data 中某一列包含空值的行
data[data['y'].isna()]
镜像操作是筛选不是空值的行
df[df['y'].notnull()]
数据校验
比较两列
比较两列是否完全一致,注意下面的两列是可以来自不同的dataframe
df['a'].equals(df['b'])
检查空值
检查某一列,是 否包含任何空值
df['column_name'].isnull().any()
检查某一列是否全为空值
df['column_name'].isnull().all()
检查整个 dataframe 是否包含任何空值
df.isnull().any().any()
输出整个 dataframe 包含任何空值的列的列名
df.columns[df.isnull().any()]
输出整个 dataframe 全是空值的列
df.columns[df.isnull().all()]
检查数据类型
查看数据类型和内存使用情况
print(df.info(memory_usage='deep'))