pandas简单操作

由于需要用到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)

运行结果为:
image.png
按照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,直接在原数据上删除重复项。

例如,需要对下面数据取出来然后按照“方剂”列去重,
image.png

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)

最后输出结果:
image.png

参考文献: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)

image.png


1 声望
0 粉丝
0 条评论
推荐阅读
Pandas处理大数据的性能优化技巧
Pandas是Python中最著名的数据分析工具。在处理数据集时,每个人都会使用到它。但是随着数据大小的增加,执行某些操作的某些方法会比其他方法花费更长的时间。所以了解和使用更快的方法非常重要,特别是在大型数...

deephub阅读 877

封面图
完整数据分析流程:Python中的Pandas如何解决业务问题
作为万金油式的胶水语言,Python几乎无所不能,在数据科学领域的作用更是不可取代。数据分析硬实力中,Python是一个非常值得投入学习的工具。

饼干哥哥阅读 617

这20个Pandas函数可以完成80%的数据科学工作
Pandas 是数据科学社区中使用最广泛的库之一,它是一个强大的工具,可以进行数据操作、清理和分析。本文将提供最常用的 Pandas 函数以及如何实际使用它们的样例。我们将涵盖从基本数据操作到高级数据分析技术的所...

deephub阅读 592

封面图
Python中的时间序列数据操作总结
Pandas是Python中一个强大且流行的数据操作库,特别适合处理时间序列数据。它提供了一系列工具和函数可以轻松加载、操作和分析时间序列数据。

deephub阅读 498

封面图
Python 如何使用 BeautifulSoup 实现解析二手房详情页信息并存储文件
采集365淘房二手房信息详情100%|██████████| 222/222 [08:37<00:00, 2.33s/it]python 版本 3.9.10

程序员汪伦阅读 386

封面图
Pandas的apply, map, transform介绍和性能测试
apply函数是我们经常用到的一个Pandas操作。虽然这在较小的数据集上不是问题,但在处理大量数据时,由此引起的性能问题会变得更加明显。虽然apply的灵活性使其成为一个简单的选择,但本文介绍了其他Pandas函数作...

deephub阅读 305

封面图
1 声望
0 粉丝
宣传栏