因为须要用到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 pddata = {'人名':    ['小明', '小红', '张三', '李四'],        '出世年份': ['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)