csv Pandas用逗号将一列拆分为多列

wpcxdonn  于 2023-02-27  发布在  其他
关注(0)|答案(8)|浏览(246)

我正尝试基于逗号/空格分隔将一列拆分为多列。
我的 Dataframe 目前看起来像

KEYS                                                  1
0   FIT-4270                                          4000.0439
1   FIT-4269                                          4000.0420, 4000.0471
2   FIT-4268                                          4000.0419
3   FIT-4266                                          4000.0499
4   FIT-4265                                          4000.0490, 4000.0499, 4000.0500, 4000.0504,

我想

KEYS                                                  1           2            3        4 
0   FIT-4270                                          4000.0439
1   FIT-4269                                          4000.0420  4000.0471
2   FIT-4268                                          4000.0419
3   FIT-4266                                          4000.0499
4   FIT-4265                                          4000.0490  4000.0499  4000.0500  4000.0504

我的代码目前删除了KEYS列,我不知道为什么。有人能改进或帮助解决这个问题吗?

v = dfcleancsv[1]

#splits the columns by spaces into new columns but removes KEYS?

dfcleancsv = dfcleancsv[1].str.split(' ').apply(Series, 1)
au9on6nz

au9on6nz1#

如果其他人想将一列(由值分隔)拆分为多列-请尝试以下操作:

series.str.split(',', expand=True)

这回答了我来这里寻找的问题。
归功于EdChum's代码,其中包括将拆分列添加回 Dataframe 。

pd.concat([df[[0]], df[1].str.split(', ', expand=True)], axis=1)

注意:第一个参数df[[0]]DataFrame

第二个参数df[1].str.split是要拆分的序列。
split Documentation
concat Documentation

xsuvu9jc

xsuvu9jc2#

使用Edchum的答案

pd.concat([df[[0]], df[1].str.split(', ', expand=True)], axis=1)

我可以通过代入变量来解决这个问题。

dfcleancsv = pd.concat([dfcleancsv['KEYS'], dfcleancsv[1].str.split(', ', expand=True)], axis=1)
d4so4syb

d4so4syb3#

OP的输出列数是可变的。在输出列数固定的特定情况下,另一个为结果列命名的优雅解决方案是使用多重赋值。
加载一个示例数据集并将其整形为long格式,以获得一个名为organ_dimension的变量。

import seaborn
iris = seaborn.load_dataset('iris')
df = iris.melt(id_vars='species', var_name='organ_dimension', value_name='value')

基于_分隔符将organ_dimension变量拆分为2个变量organdimension

df[['organ', 'dimension']] = df['organ_dimension'].str.split('_', expand=True)
df.head()

Out[10]: 
  species organ_dimension  value  organ dimension
0  setosa    sepal_length    5.1  sepal    length
1  setosa    sepal_length    4.9  sepal    length
2  setosa    sepal_length    4.7  sepal    length
3  setosa    sepal_length    4.6  sepal    length
4  setosa    sepal_length    5.0  sepal    length

基于this answer“如何将一列拆分为两列?"

k4aesqcs

k4aesqcs4#

最简单的使用方法是矢量化

df = df.apply(lambda x:pd.Series(x))
gwbalxhn

gwbalxhn5#

也许这样会有用

df = pd.concat([df['KEYS'],df[1].apply(pd.Series)],axis=1)
6mw9ycah

6mw9ycah6#

看看这个

Responder_id    LanguagesWorkedWith
0   1   HTML/CSS;Java;JavaScript;Python
1   2   C++;HTML/CSS;Python
2   3   HTML/CSS
3   4   C;C++;C#;Python;SQL
4   5   C++;HTML/CSS;Java;JavaScript;Python;SQL;VBA
... ... ...
87564   88182   HTML/CSS;Java;JavaScript
87565   88212   HTML/CSS;JavaScript;Python
87566   88282   Bash/Shell/PowerShell;Go;HTML/CSS;JavaScript;W...
87567   88377   HTML/CSS;JavaScript;Other(s):
87568   88863   Bash/Shell/PowerShell;HTML/CSS;Java;JavaScript...`
###Split the LanguagesWorkedWith column into  multiple columns  by using` data= data1['LanguagesWorkedWith'].str.split(';').apply(pd.Series)`.###
` data1 = pd.read_csv('data.csv', sep=',')
data1.set_index('Responder_id',inplace=True)
data1
data1.loc[1,:]
data= data1['LanguagesWorkedWith'].str.split(';').apply(pd.Series)
data.head()`
5anewei6

5anewei67#

其他的答案似乎都对我不起作用。在阅读了https://pandas.pydata.org/docs/reference/api/pandas.Series.str.split.html上的文档后,这个答案起作用了。它还扩展到了新的列中

df_new = df[0].str.split(',', expand=True)
yrwegjxp

yrwegjxp8#

你可能也想试试datar,一个将dplyrtidyr和相关的R包移植到python的包:

>>> df
         i       j              A
  <object> <int64>       <object>
0       AR       5    Paris,Green
1      For       3  Moscow,Yellow
2      For       4  NewYork,Black
>>> from datar import f
>>> from datar.tidyr import separate
>>> separate(df, f.A, ['City', 'Color'])
         i       j     City    Color
  <object> <int64> <object> <object>
0       AR       5    Paris    Green
1      For       3   Moscow   Yellow
2      For       4  NewYork    Black

相关问题