天知道 发表于 2021-4-6 09:07

50万行数据处理方法求指南

本帖最后由 天知道 于 2021-4-12 14:51 编辑

公司记录,57万行,950列(其中有约150列列名是名字略有差异,如多个空格,英文中文逗号不同,但实际东西是一个;这是因为这些记录前后录入人员不固定出现一个东西多个命名);excel文件大概170MB,导出csv约700mb。
目标是将其中一列数据标准化(此列同样物品被命名了n个不同写法),基本上只能遇过排序、查找等方法小批量手动改,以前改过一些,使用excel很方便,现在数据太多,excel查看可以,搜索过滤太慢,想找一个类似于excel操作方法的。
pandas在学,这个excel文件就是用concat组合45个老excel文件形成的,但感觉不太直观,而且对于批量修改某些行的某个列不熟。
sqlite也试过导入csv,但它对列名有要求,不能用 - 号,会改成 _ ,这个会混淆。filemaker同上,因为最后我要导出成excel,让我再改800个列名………

210412更新:根据楼里同学的指导尝试用pandas处理,目前遇到的坑:csv比xls占内存大多了,读取csv直接把我16gb内存占光,读取xls就占了4个G不到,用pickle保存的文件也差不多大小

小单酱 发表于 2021-4-6 09:19

poi?

すぴぱら 发表于 2021-4-6 09:29

alann 发表于 2021-4-6 09:30

50万行的数据加工还是pandas最方便吧

发表于 2021-4-6 09:37

skill 发表于 2021-4-6 09:37

jupyter notebook跑pandas吧,中间结果还能存起来,这不是好用得很么

marrrk 发表于 2021-4-6 11:03

要不抽个1w行,950列的数据上传过来, 我帮你看看

nkscorpio 发表于 2021-4-6 11:21

nexus1 发表于 2021-4-6 11:55

感觉还得pandas

奶疼乃藤 发表于 2021-4-6 12:09

6楼正解

Litccc 发表于 2021-4-6 12:19

pandas很好解决吧

win8 发表于 2021-4-6 12:22

列名会混淆就改列名啊我没基础,觉得还是sql好用

天知道 发表于 2021-4-6 12:36

skill 发表于 2021-4-6 09:37
jupyter notebook跑pandas吧,中间结果还能存起来,这不是好用得很么

这个数据量用jupyter中间保存不会太慢吗?45个excel合并保存用了约45分钟
谢谢楼上各位

—— 来自 Xiaomi Redmi K30 Pro, Android 11上的 S1Next-鹅版 v2.4.4.1

天知道 发表于 2021-4-6 12:37

marrrk 发表于 2021-4-6 11:03
要不抽个1w行,950列的数据上传过来, 我帮你看看

不好意思,数据不能外传。谢谢

—— 来自 Xiaomi Redmi K30 Pro, Android 11上的 S1Next-鹅版 v2.4.4.1

daikejay 发表于 2021-4-6 12:41

以前处理过二十多万条的用mysql加python解决了,openpyxl直接导入xls用数据库命令处理,合并标准化和筛选都挺方便就是得花时间写代码,需要的时候再导出xls就是了,效率还行

skill 发表于 2021-4-6 13:27

天知道 发表于 2021-4-6 12:36
这个数据量用jupyter中间保存不会太慢吗?45个excel合并保存用了约45分钟
谢谢楼上各位


写个python先把45个csv合并了,操作一个就快多了。中间数据存成pkl,快的很

天知道 发表于 2021-4-6 14:08

skill 发表于 2021-4-6 13:27
写个python先把45个csv合并了,操作一个就快多了。中间数据存成pkl,快的很

我已经合并了,csv大小是700m,就是怕对这个文件操作中要存盘时很慢。kpl是什么格式?

—— 来自 Xiaomi Redmi K30 Pro, Android 11上的 S1Next-鹅版 v2.4.4.1

霜落xss 发表于 2021-4-6 14:15

天知道 发表于 2021-4-6 14:08
我已经合并了,csv大小是700m,就是怕对这个文件操作中要存盘时很慢。kpl是什么格式?

—— 来自 Xiaomi ...

csv读进python,在python里处理好再存成csv或xlsx就可以了,只有读取和导出的时候涉及硬盘IO会有点慢,中间处理都是在内存里,很快的
之前用python折腾千万行量级的数据都不算太卡,这个50万行应该更轻松了

skill 发表于 2021-4-6 14:25

天知道 发表于 2021-4-6 14:08
我已经合并了,csv大小是700m,就是怕对这个文件操作中要存盘时很慢。kpl是什么格式?

—— 来自 Xiaomi ...

pkl就是pickle库存储的内存二进制文件,存和取都非常快。具体可以上网查查。用pandas把csv读成pd之后就直接存一个pd的pkl文件。下次直接加载这个pkl文件,比你读csv可快多了
只要你内存大,处理这些pkl基本都不耗时的

DeepFishing 发表于 2021-4-6 15:26

pandas处理然后hdf5保存吧,csv这种读写确实都慢

Dreki 发表于 2021-4-6 15:45

就pandas正常改把,列名你可以先自己把-改成随便一个占位的最后再把他改回来

astkaasa 发表于 2021-4-6 16:01

sed

天知道 发表于 2021-4-6 16:25

好的,谢谢楼上各位,我去学习下

—— 来自 Xiaomi Redmi K30 Pro, Android 11上的 S1Next-鹅版 v2.4.4.1

糊状物 发表于 2021-4-6 18:09

pandas自然可以,但是看主贴需求仅仅只是把物品名称统一一下,只要你设计好转换函数,python直接读取csv套个循环应用转换函数不一样能解决吗,都不需要上pandas。
至于导入到sql的列名问题,一样可以用上述方法转换列名,怕忘记了大不了将对应关系找个文件存起来就好了,都不需要手动啊。

天知道 发表于 2021-4-6 18:39

糊状物 发表于 2021-4-6 18:09
pandas自然可以,但是看主贴需求仅仅只是把物品名称统一一下,只要你设计好转换函数,python直接读取csv套 ...

就是这个物品名称转换太麻烦了,同一个物品有N种叫法,还有混淆的,我的不入门编程根本没法处理,只能手动转。

KH2841 发表于 2021-4-9 02:12

没有比pandas更简单的方案了,估计就是3行代码的事,读csv,替换,写回

天知道 发表于 2021-4-9 06:36

本帖最后由 天知道 于 2021-4-9 06:46 编辑

KH2841 发表于 2021-4-9 02:12
没有比pandas更简单的方案了,估计就是3行代码的事,读csv,替换,写回
我举个例子,我需要修改的列中有如下数据:
1.美孚600 XP 320
2.美孚320号齿轮油(后面的一列中标明其倾点为-21℃)
3.美孚632
4.美孚600XP320
5.美孚CKD 320
6.美孚CKD320
7.美孚SHC 320
8.美孚SHC 632
9.美孚320合成齿轮油
10.美孚320号齿轮油(后面的一列中标明其倾点为-42℃)
11.mobil SHC 632


其中1到6实际是一个东西,7到11是另一个东西;而且以上还没有把所有可能的名字全列出来。这玩意有办法写替换代码吗?

kinta 发表于 2021-4-9 07:21

pandas

—— 来自 samsung SM-G9910, Android 11上的 S1Next-鹅版 v2.4.3

kinta 发表于 2021-4-9 07:32

非码农,平时稍微用点pandas处理文档
看看这样行不
import pandas as pd
Df=pd.read_csv(xxx)
Df[列名]=Df[列名]. map(f)
Df.to_excel()

def f(x):
   … #修改数据
    return 处理完的数据



—— 来自 samsung SM-G9910, Android 11上的 S1Next-鹅版 v2.4.3

天知道 发表于 2021-4-9 07:42

kinta 发表于 2021-4-9 07:32
非码农,平时稍微用点pandas处理文档
看看这样行不
import pandas as pd

f(x)使用多对一的词典那种方式吗?还是正则?
这块我真的有点摸不着头脑。我在想是不是将以前修改过的记录(两列,一列是随便命名的,另一列是我手动标准化命名的)提取记录,形成这样一个词典之类的,然后进行比对。我得查查。

happydog 发表于 2021-4-9 08:01

天知道 发表于 2021-4-9 06:36
我举个例子,我需要修改的列中有如下数据:
1.美孚600 XP 320
2.美孚320号齿轮油(后面的一列中标明其倾点 ...

如果你已经知道所有的可能组合,那么直接判断就可以了,否则还得用正则

天气姐姐 发表于 2021-4-9 08:03

借地方问一下,对象单位一个excel将近1G了,里边数据不多,都是各种手机拍的图片,这种怎么处理好?
之前试过用excel自带的压缩图片处理,但是画质压得太差了,是不是单独找个地方存图片然后超链接?

橋白 发表于 2021-4-9 08:04

天知道 发表于 2021-4-9 06:36
我举个例子,我需要修改的列中有如下数据:
1.美孚600 XP 320
2.美孚320号齿轮油(后面的一列中标明其倾点 ...

如果列值就这么些不会再增加了或者你就做这么一次 可以set处理一下看一下所有的列值然后替换 要不然估计还是得写函数写正则啥的

归英章华 发表于 2021-4-9 08:13

绕指流光 发表于 2021-4-9 08:32

天气姐姐 发表于 2021-4-9 08:03
借地方问一下,对象单位一个excel将近1G了,里边数据不多,都是各种手机拍的图片,这种怎么处理好?
之前试 ...

纯卸图片不需要整理的话改名解压大法就能解决,如果需要连带数据一起处理那最优解可能是vba遍历后另存

—— 来自 Xiaomi M2011K2C, Android 11上的 S1Next-鹅版 v2.4.4.1

marrrk 发表于 2021-4-9 15:04

天知道 发表于 2021-4-9 06:36
我举个例子,我需要修改的列中有如下数据:
1.美孚600 XP 320
2.美孚320号齿轮油(后面的一列中标明其倾点 ...

手动写字典把,这种没规律的,编程救不了你
有规律的,正则还能处理一些

kinta 发表于 2021-4-9 16:22

天知道 发表于 2021-4-9 07:42
f(x)使用多对一的词典那种方式吗?还是正则?
这块我真的有点摸不着头脑。我在想是不是将以前修改过的记 ...

就是一个函数,对这一列的每一个数据做处理,可以用正则,也可以用一堆if来搞,最后return你处理完的数据
比如你把某一列数据里'-'改成'_',就
def f(x):
    x=re.sub('\-','_',x)
    return x
页: [1]
查看完整版本: 50万行数据处理方法求指南