2017-09-06 272 views
0

我有一个很大的csv数据文件,我想使用列进行分割。也就是说,一些指定的列进入一个部分,其他一些列进入另一部分。我也希望能够创建2个以上的零件。我如何在Python中做到这一点?另外,是否有一个python库来处理多种数据格式?如何使用列名称将csv拆分为多个部分?

输入格式:

policyID statecode county eq_site_limit hu_site_limit fl_site_limit fr_site_limit tiv_2011 tiv_2012 eq_site_deductible hu_site_deductible fl_site_deductible fr_site_deductible point_latitude point_longitude line construction point_granularity 

119736 FL CLAY COUNTY 498960 498960 498960 498960 498960 792148.9 0 9979.2 0 0 30.102261 -81.711777 Residential Masonry 1 
448094 FL CLAY COUNTY 1322376.3 1322376.3 1322376.3 1322376.3 1322376.3 1438163.57 0 0 0 0 30.063936 -81.707664 Residential Masonry 3 
206893 FL CLAY COUNTY 190724.4 190724.4 190724.4 190724.4 190724.4 192476.78 0 0 0 0 30.089579 -81.700455 Residential Wood 1 
333743 FL CLAY COUNTY 0 79520.76 0 0 79520.76 86854.48 0 0 0 0 30.063236 -81.707703 Residential Wood 3 
172534 FL CLAY COUNTY 0 254281.5 0 254281.5 254281.5 246144.49 0 0 0 0 30.060614 -81.702675 Residential Wood 1 

输入格式色谱柱:

policyID statecode county eq_site_limit hu_site_limit fl_site_limit fr_site_limit tiv_2011 tiv_2012 eq_site_deductible hu_site_deductible fl_site_deductible fr_site_deductible point_latitude point_longitude line construction point_granularity 

输出格式色谱柱:

部分A:['policyID', 'statecode', 'county', 'eq_site_limit', 'hu_site_limit']

部分B:['fl_site_limit', 'fr_site_limit', 'tiv_2011', 'tiv_2012', 'eq_site_deductible', 'hu_site_deductible', 'fl_site_deductible', 'fr_site_deductible', 'point_latitude', 'point_longitude', 'line', 'construction', 'point_granularity']

代码:

import csv 
import pandas as pd 

df = pd.read_csv("FL_insurance_sample.csv") 
cl_list = list(df.columns.values) 
a = cl_list[:5] 
b = cl_list[5:] 

with open('data1.csv', 'w') as datafile: 
    for x in a: 
     saved_column = df[x] 
     datafile.write(saved_column) 

with open('data2.csv', 'w') as datafile: 
    for x in b: 
     saved_column = df[x] 
     datafile.write(saved_column) 
+1

我们需要查看csv文件的示例以及您尝试处理它的代码。 –

+0

还有一些指示输出必须具有的格式。 –

+0

“许多数据格式”是什么意思? – DyZ

回答

2

我假设你想将原始数据框中的特定列分割为新的数据框,然后分割成csv
让我知道这个假设是否不正确,因为答案是基于此。

OK,所以你读csv到大熊猫数据帧(DF)

import csv 
import pandas as pd 

df = pd.read_csv("FL_insurance_sample.csv") 

然后,创建一个新的DF根据您的需求(同时在这里你的A部分)

>>> part_A = df.filter(['policyID', 'statecode', 'county', 'eq_site_limit', 'hu_site_limit'], axis=1) 

>>> part_A 
    policyID statecode  county eq_site_limit hu_site_limit 
0  NaN  NaN   NaN   NaN   NaN 
1 119736.0  FL CLAY COUNTY  498960.0  498960.00 
2 448094.0  FL CLAY COUNTY  1322376.3  1322376.30 
3 206893.0  FL CLAY COUNTY  190724.4  190724.40 
4 333743.0  FL CLAY COUNTY   0.0  79520.76 
5 172534.0  FL CLAY COUNTY   0.0  254281.50 

发送part_A DF数据为CSV

>>> part_A.to_csv("part_A.csv", index=False, encoding='utf-8') 

同样创造了新的DF为part_B

>>> part_B = df.filter(['fl_site_limit', 'fr_site_limit', 'tiv_2011', 'tiv_2012', 'eq_site_deductible', 'hu_site_deductible', 'fl_site_deductible', 'fr_site_deductible', 'point_latitude', 'point_longitude', 'line', 'construction', 'point_granularity'], axis=1) 

然后发送part_B df到csv。

>>> part_B.to_csv("part_B.csv", index=False, encoding='utf-8') 

因此,您可以根据您的需要拆分列并发送到csv

1

写专栏的任何列表到CSV文件中,使用功能to_csv()

df = pd.read_csv("FL_insurance_sample.csv") 

df.iloc[:,:5].to_csv("data1.csv") 
df.iloc[:,5:].to_csv("data2.csv") 

如果您想直接通过列的列表:

df[a].to_csv("data1.csv") 
df[b].to_csv("data2.csv") 
+0

如果我想提到列名而不是':5',我该怎么做? –

+0

查看最新的答案。 – DyZ