如何根据列标题将一个巨大的csv拆分为多个csv



我将根据下面的简单示例来表示我的问题。我有下面的主csv,我正试图根据列标题拆分为2个或多个csv,在每个csv文件中保持唯一的列id不变。

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

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

所需输出

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是包含所有单独数据帧的列表。输出:

# 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()

输出:

#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

相关内容

  • 没有找到相关文章

最新更新