繁体   English   中英

如何根据 header 列将巨大的 csv 拆分为多个 csv

[英]How to Split a huge csv into multiple csv's based on column header

我将尝试根据下面的简单示例来表示我的问题。 I have below main csv and I am trying to split into 2 or more csv basing on column header, keeping the unique column id in intact in every csv file.

下面是我试图弄清楚的代码,但没有得到结果。

import pandas as pd

df = pd.read_csv('abc.csv')
df[['id','name','age']] = df['csv1'].str.split(' ', expand=True)




csv
       id     name      age    color  Gender
0     101     Jack      23     white    M
1     102     Mary      25     black    F
2     103     Tom       24     brown    M

需要 Output

csv1

       id     name    age
0     101     Jack    23
1     102     Mary    25
2     103     Tom     24 


csv2 -

       id   color  Gender
0     101   white    M
1     102   black    F
2     103   brown    M

更新
我用np.array_split找到了一个更好的方法

我用这个例子df:

               x     y          R         TR       x_c      y_c     xxx    yyy         RRR        TTTR      xxx_c     yyy_c
id                                                                                                                         
1256780.0  13989  6241   6.689222  20.986341  14050.83  6315.33  213989  36241   46.689222  520.986341  614050.83  76315.33
12000.0    14013  6278  53.152036   0.000000  14060.00  6288.00  214013  36278  453.152036    5.000000  614060.00  76288.00
1100.0     14111  6379  87.598357   5.000000  14070.55  7000.00  214111  36379  487.598357   55.000000  614070.55  76288.00 

其中有 12 列。

# the 4 means, split the df into 4 evenly sized chunks
chunks = np.array_split(df,4, axis=1)

Chunks是一个包含所有单独数据帧的列表。 Output:

# chunks[0]
                 x       y          R
id                                   
1256780.0  13989.0  6241.0   6.689222
12000.0    14013.0  6278.0  53.152036
1100.0     14111.0  6379.0  87.598357

# chunks[1]
                  TR       x_c      y_c
id                                     
1256780.0  20.986341  14050.83  6315.33
12000.0     0.000000  14060.00  6288.00
1100.0      5.000000  14070.55  7000.00

# chunks[2]
                xxx      yyy         RRR
id                                      
1256780.0  213989.0  36241.0   46.689222
12000.0    214013.0  36278.0  453.152036
1100.0     214111.0  36379.0  487.598357

# chunks[3]
                 TTTR      xxx_c     yyy_c
id                                        
1256780.0  520.986341  614050.83  76315.33
12000.0      5.000000  614060.00  76288.00
1100.0      55.000000  614070.55  76288.00

老答案:

您可以计算一半的列,然后使用iloc将数据帧分成两部分。

df = df.set_index('id')
half = len(df.columns)//2
df1, df2 = df.iloc[:,:half], df.iloc[:,half:]
df1 = df1.reset_index()
df2 = df2.reset_index()

Output:

#df1
    id  name  age
0  101  Jack   23
1  102  Mary   25
2  103   Tom   24

#df2
    id  color Gender
0  101  white      M
1  102  black      F
2  103  brown      M

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM