Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据条件将大型csv文件拆分为多个_Python_Csv_Split - Fatal编程技术网

Python 根据条件将大型csv文件拆分为多个

Python 根据条件将大型csv文件拆分为多个,python,csv,split,Python,Csv,Split,我有一个大的csv文件,我想用一个条件将它分成几个文件 这是该文件的摘录: Well Zones Top Bottom E18 A 4273714.58 412435.8397 E18 B 99966532.9 96167746.15 E18 C 48737298.05 9038801.616 E18 D 42762897.31 23612634.16 E22 A

我有一个大的csv文件,我想用一个条件将它分成几个文件

这是该文件的摘录:

Well    Zones   Top          Bottom
E18       A     4273714.58  412435.8397
E18       B     99966532.9  96167746.15
E18       C     48737298.05 9038801.616
E18       D     42762897.31 23612634.16
E22       A     706299.7065 0
E22       B     17639585.97 8763276.956
E22       C     7535182.443 756105.4564
E22       D     7858392.171 4359022.937
E22       A     202221.3273 0
E23       B     1876003.29  100344.7098
E23       C     39002827.89 32876455.8
E23       D     10856279.73 944615.8366
我需要做的是创建几个文件,每个文件只有一种类型的“区域”,如下所示:

一个csv文件:

Well    Zones   Top         Bottom
E18      A      4273714.58  412435.8397
E22      A      706299.7065 0
E22      A      202221.3273 0
另一个csv文件:

Well    Zones   Top         Bottom
E18     B       99966532.9  96167746.15
E22     B       17639585.97 8763276.956
E23     B       1876003.29  100344.7098
在网上冲浪时,我只发现根据行数/行数将大文件分成不同的块。。。例如下面的代码:

  for i,chunk in enumerate(pd.read_csv(file, chunksize=3)):

如果你想使用
pandas
,那么线程应该对你有帮助,特别是
unutbu
答案,它解释了
.loc
方法的用法
pandas.DataFrame

如果你想使用
pandas
,那么线程应该对你有帮助,尤其是
unutbu
答案,这说明了熊猫.DataFrame的
.loc
方法的用法。您可以使用
集合。defaultdict
区域对行进行分组:

from collections import defaultdict
import csv
result = defaultdict(list)
_header, *data = csv.reader(open('filename.csv'))
for a, b, *c in data:
  result[b].append([a, b, *c])

for a, b in result.items():
   with open(f'zone_{a}.csv', 'w') as f:
     write = csv.writer(f)
     write.writerows([_header, *b])

您可以使用
collections.defaultdict
区域对行进行分组

from collections import defaultdict
import csv
result = defaultdict(list)
_header, *data = csv.reader(open('filename.csv'))
for a, b, *c in data:
  result[b].append([a, b, *c])

for a, b in result.items():
   with open(f'zone_{a}.csv', 'w') as f:
     write = csv.writer(f)
     write.writerows([_header, *b])
使用Miller(),一个伟大的命令行实用程序,非常简单

mlr --tsv --from input.csv put -q 'tee > "Zone_".$Zones.".csv", $*'
从开始(制表符分隔)

你有

$ cat Zone_A.csv
Well    Zones   Top Bottom
E18 A   4273714.58  412435.8397
E22 A   706299.7065 0
E22 A   202221.3273 0

$ cat Zone_B.csv
Well    Zones   Top Bottom
E18 B   99966532.9  96167746.15
E22 B   17639585.97 8763276.956
E23 B   1876003.29  100344.7098

$ cat Zone_C.csv
Well    Zones   Top Bottom
E18 C   48737298.05 9038801.616
E22 C   7535182.443 756105.4564
E23 C   39002827.89 32876455.8

$ cat Zone_D.csv
Well    Zones   Top Bottom
E18 D   42762897.31 23612634.16
E22 D   7858392.171 4359022.937
E23 D   10856279.73 944615.8366
使用Miller(),一个伟大的命令行实用程序,非常简单

mlr --tsv --from input.csv put -q 'tee > "Zone_".$Zones.".csv", $*'
从开始(制表符分隔)

你有

$ cat Zone_A.csv
Well    Zones   Top Bottom
E18 A   4273714.58  412435.8397
E22 A   706299.7065 0
E22 A   202221.3273 0

$ cat Zone_B.csv
Well    Zones   Top Bottom
E18 B   99966532.9  96167746.15
E22 B   17639585.97 8763276.956
E23 B   1876003.29  100344.7098

$ cat Zone_C.csv
Well    Zones   Top Bottom
E18 C   48737298.05 9038801.616
E22 C   7535182.443 756105.4564
E23 C   39002827.89 32876455.8

$ cat Zone_D.csv
Well    Zones   Top Bottom
E18 D   42762897.31 23612634.16
E22 D   7858392.171 4359022.937
E23 D   10856279.73 944615.8366

档案有多大?它适合内存吗?因为你使用熊猫,你试过@NoufalIbrahim吗?是的,它适合内存,它不太大。文件有多大?它适合记忆吗?因为你在使用熊猫,你试过@NoufalIbrahim吗?是的,它适合记忆,它不太大。感谢链接,unubtu的答案非常有用谢谢链接,unubtu的答案非常有用