本文最后更新于:2020-08-22 15:52
最近笔者用爬虫爬取了 48 万例病人数据,整个文件大小有 600m。用 MS Excel 处理的话,打开就得花 10min,每进行一个操作,少则 10s,多则 5min,有甚至直接卡死。无奈之下,只能用 Python 解决了,第一时间就想到了大名鼎鼎的 Pandas。
Pandas 是为 Python 编程语言编写的用于数据处理和分析的软件库,主要用于从各种文件格式(例如:CSV、JSON、SQL、Microsoft Excel)导入数据进行数据分析。
这里就记录一些 Pandas 代码以备忘
打开文件
1 2 3 4 5 6 7 8 9 10 11
| 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')
|
将 DataFrame 写入文件
1
| df.to_csv('data5.csv', encoding = 'gbk', na_rep='NA')
|
数据清洗
列出所有的 Column 的抬头
查看数据
截取部分列的数据
1 2
| df.loc[:, ['校正后年龄', '体检次数']] df.loc[:, '校正后年龄': '体检次数']
|
删除列
1 2 3 4 5
| list_to_del = [ '年龄', '血压', ] df = df.drop(list_to_del, axis = 1)
|
对某列进行操作
1
| df['年龄'] = df['年龄'].map(lambda x: re.sub('岁', '', str(x)))
|
1
| df['校正后年龄'] = df.apply(lambda x: int(x['年龄']) - 2020 + int(x['日期'][0:4]) if not x['年龄'] == 'nan' else 'NA', axis=1)
|
1
| df = df.loc[-(df['性别'] == 2)]
|
1 2
| df = df.drop_duplicates(['month', 'day']) df = df.drop_duplicates(['month'], take_last = True )
|
1
| df.rename(columns = {'ISI': 'isi'}, inplace = True)
|
显示空值的数目
1 2
| for item in df.columns.values: print(item, df[item].isna().sum())
|
将控制用 NA
填充
替换数据
1
| df['血压'] = df['血压'].replace('110/33mmHg', '110/80mmHg')
|
数据统计
计算某列变量频数
1
| df['校正后年龄'].value_counts()
|