共计 2058 个字符,预计需要花费 6 分钟才能阅读完成。
因为须要用到 pandas 解决一些简略数据,记录一下应用的函数和思路:
1、pandas 读取 csv 数据
csv 是 gb2312 编码,之前 pandas 始终没有代码提醒,不晓得怎么制订 read_csv 的编码方式,于是用 open 函数指定 gb2312 编码关上后,再把后果送入 padnas,这样能解决不能解析的编码问题。
with open("金匮名医验案精选(900 多则).csv","r", encoding="gb2312") as f: | |
df = pd.read_csv(f) |
起初发现,能够间接在 read_csv()中指定编码方式:
df = pd.read_csv('xxy_yang.csv', encoding="gbk")
2、pandas 行列读取操作
两个次要办法:依照 index 索引操作 df.iloc(),依照行、列名进行操作的 df.loc()
对于这个一个数据表:
import pandas as pd | |
data = {'人名': ['小明', '小红', '张三', '李四'], | |
'出世年份': ['2000', '2001', '2002', '2003'], | |
'高考分数': ['630', '590', '600', '520'], | |
'月薪': ['5200', '3900', '4500', '3500']} | |
df = pd.DataFrame(data, columns=['人名', '出世年份', '高考分数', '月薪', '年终奖'], | |
index=['one', 'two', 'three', 'four']) | |
df['年终奖'] = ['9800', '9200', '9500', '9000'] | |
print("行索引:{}".format(list(df.index))) | |
print("列索引:{}".format(list(df.columns))) | |
print(df.index[1:3]) | |
print(df.columns[1]) | |
print(df.columns[1:3]) | |
print(df) |
运行后果为:
依照 index 索引操作 df.iloc()例如:
df.iloc[1, 3] # 按坐标取(第二行第四列)df.iloc[[1], [3]] # 按坐标取(第二行第四列)df.iloc[:, 1] # 按地位取(任意行第二列)df.iloc[:, [1, 3]] # 按地位取不间断列数据(任意行第二列,第四列)df['人名'] | |
df. 人名 |
按行、列名操作如:
print(df.loc['two']) | |
print(df.loc['two', '人名']) | |
print(df.loc['two':'three']) | |
print(df.loc[['one', 'three']]) | |
print(df.loc[['one', 'three'], ['人名', '出世年份']]) |
参考文献:pandas 读取行列数据 - 具体介绍(间断 & 不间断)https://blog.csdn.net/in546/a…
3、去重
drop_duplicates(subset=[‘comment’], keep=‘first’, inplace=True)
参数:
subset:列表的模式填写要进行去重的列名,默认为 None,示意依据所有列进行。
keep:可选参数有三个:first、last、False,默认值 first。其中,
(1)first 示意:保留第一次呈现的反复行,删除前面的反复行。
(2)last 示意:删除反复项,保留最初一次呈现。
(3)False 示意:删除所有反复项。
inplace:默认为 False,删除反复项后返回正本。True,间接在原数据上删除反复项。
例如,须要对上面数据取出来而后依照“方剂”列去重,
with open("伤寒金匮方剂及中药.csv","r", encoding="utf-8") as f: | |
df = pd.read_csv(f) | |
df = df.iloc[:,[0,1]] | |
print(len(df)) | |
df.drop_duplicates(subset=["方剂"],keep="first", inplace=True) | |
print(len(df)) | |
print(df) |
最初输入后果:
参考文献:pandas 依据某列去重 https://blog.csdn.net/qq_4396…
4、将去重后的数据写入 csv 备用
应用 to_csv(),指定编码,写入形式和 open 函数十分相似。
5、DataFrame 的 query()办法
df = pd.read_csv("伤寒金匮方剂及中药_已去重.csv", encoding="utf-8") | |
print(df.query("方剂 ==' 桂枝汤 '")) | |
print(df.query("方剂.str.contains(' 桂枝汤 ')")) | |
fangji = '桂枝汤' | |
df = df.query("方剂.str.startswith('{}')".format(fangji)) #等价于上面语句 | |
#df = df.query("方剂.str.startswith(@fangji)") | |
print(df) | |
print(len(df.index) == 0) |