Pandas CSV 及 Excel 操作备忘录
Pandas CSV 及 Excel 操作备忘录

最近笔者用爬虫爬取了 48 万例病人数据,整个文件大小有 600m。用 MS Excel 处理的话,打开就得花 10min,每进行一个操作,少则 10s,多则 5min,有甚至直接卡死。无奈之下,只能用 Python 解决了,第一时间就想到了大名鼎鼎的 Pandas。
Pandas 是为 Python 编程语言编写的用于数据处理和分析的软件库,主要用于从各种文件格式(例如:CSV、JSON、SQL、Microsoft Excel)导入数据进行数据分析。
这里就记录一些 Pandas 代码以备忘
打开文件
import pandas as pd
import numpy as np
import os
from pandas import DataFrame, Series
import re
os.chdir('/content/drive/Shared drives/Infinite/')
df = pd.read_csv('data5.csv', index_col = 0, encoding = 'gbk')
#pd.set_option('display.width', None) # 列之间的省略号
#pd.set_option('display.max_rows', None) # 行之间的省略号
将 DataFrame 写入文件
df.to_csv('data5.csv', encoding = 'gbk', na_rep='NA')
数据清洗
列出所有的 Column 的抬头
df.columns.values
查看数据
df.head(20) # 前20行
df[0:2] # 第1-2行数据
截取部分列的数据
df.loc[:, ['校正后年龄', '体检次数']]
df.loc[:, '校正后年龄': '体检次数']
删除列
list_to_del = [
'年龄',
'血压',
]
df = df.drop(list_to_del, axis = 1)
对某列进行操作
df['年龄'] = df['年龄'].map(lambda x: re.sub('岁', '', str(x)))
df['校正后年龄'] = df.apply(lambda x: int(x['年龄']) - 2020 + int(x['日期'][0:4]) if not x['年龄'] == 'nan' else 'NA', axis=1)
df['年龄'] = df['年龄'] * 2
df = df.loc[-(df['性别'] == 2)] # 删除性别是2的数据
df = df.drop_duplicates(['month', 'day']) #移除month和day列包含重复值的行,保留第一个
df = df.drop_duplicates(['month'], take_last = True )#移除month列包含重复值的行,保留最后一个
df.rename(columns = {'ISI': 'isi'}, inplace = True) #ISI列列名改为isi
显示空值的数目
df.isna().sum()
for item in df.columns.values:
print(item, df[item].isna().sum())
将控制用 NA 填充
df = df.fillna('NA')
替换数据
df['血压'] = df['血压'].replace('110/33mmHg', '110/80mmHg') # 把'110/33mmHg'替换成'110/80mmHg'
数据统计
计算某列变量频数
df['校正后年龄'].unique() #输出month列唯一值
df['校正后年龄'].value_counts() #输出month列各变量出现频数
评论