Python 使用逗号将列拆分为多列

Python 使用逗号将列拆分为多列,python,pandas,csv,dataframe,split,Python,Pandas,Csv,Dataframe,Split,我正在尝试基于逗号/空格分隔将一列拆分为多列 我的数据帧当前看起来像 KEYS 1 0 FIT-4270 4000.0439 1 FIT-4269 4000.0420, 4000.0471 2 FIT-4268

我正在尝试基于逗号/空格分隔将一列拆分为多列

我的数据帧当前看起来像

     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)

使用Edchums的答案

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)

也许这应该奏效:

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

如果其他人想要将单个列(由值删除)拆分为多个列,请尝试以下操作:

series.str.split(',', expand=True)
这回答了我来这里寻找的问题

归功于代码,其中包括将拆分列添加回数据帧

pd.concat([df[[0]], df[1].str.split(', ', expand=True)], axis=1)
注意:第一个参数
df[[0]]
DataFrame

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


OP的输出列数可变。 在输出列数量固定的特定情况下,命名结果列的另一个优雅解决方案是使用多重赋值

加载示例数据集,并将其重塑为长格式以获取变量 称为
器官\u维度

import seaborn
iris = seaborn.load_dataset('iris')
df = iris.melt(id_vars='species', var_name='organ_dimension', value_name='value')
根据
\u
分隔符,将
器官维度
变量拆分为两个变量
器官
维度

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

基于“如何将一列拆分为两列?”

使用以下矢量化进行优化和分解:

df = df.apply(lambda x:pd.Series(x))
看看这个

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

您可能还想试试,一个包将
dplyr
tidyr
和相关的R包移植到python:

>>df
i j A
0 AR 5巴黎,绿色
1对3莫斯科,黄色
纽约4人2人,黑人
>>>从datar导入f
>>>从datar.tidyr单独导入
>>>单独(df、f.A、[“城市”、“颜色])
城市色彩
0 AR 5巴黎绿
莫斯科黄1:3
纽约黑人4人2人

你想要
pd.concat([df[[0]],df[1].str.split(',',',expand=True)],axis=1)
iUCI我知道你是一个有很多声誉的重要人物,但如果你把它作为一个官方答案,我会接受。它起作用了great@EddwinnEdChum就是这么做的。确保你至少对他的评论投赞成票。@Eddwinn另外,把他的回答作为你自己的,给EdChum一点荣誉。如果你在2天内选择了答案,你就不会得到代表,这很好。如果其他人在这之后投票,EdChum知道他在做什么。我没有发布答案,因为时间已经晚了,我无法确认这是否是你想要的,而且有时我在拆分时非常忙碌,我有350列,其中许多是空白的,有没有处理拆分的动态方法?很好,如果警告“FutureWarning:在将来的版本中将不推荐使用字符的列式迭代..请使用df['Organe','dimension']]=df['Organe\u dimension'].str.split(''UU',expand=True)@MarkK谢谢我更新了答案以使用您建议的分配。