Pandas DataFrame中的拆分列(定界);与键错误长度相同的列

时间:2018-07-30 15:16:27

标签: python pandas

我有一个DataFrame,其中有一个名为“财务周名称”的列,每个财务周的名称都类似于“ 17周”。

  Financial Week Name   Day Part
    week 0          Breakfast
    week 0          Lunch
    week 0          Dinner
    week 1          Breakfast
    week 1          Lunch

问题是我无法从最小到最大排序。我的想法是在“周”一词之后的空格后面砍掉任何东西。本质上是定界的。我向数据框添加了一个空列(名为“ weekNo”),然后尝试使用.str.split方法将数字推入新创建的列:

 df[['Financial Week Name', 'weekNo']] = df['Financial Week Name'].str.split(' ', expand=True) 

但出现以下错误:

" ValueError: Columns must be same length as key"

我不确定如何从字符串“ week x”的末尾获取数字值以到达单独的列,并且尝试使用.iloc未能成功切出这些值。我很沮丧。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

您需要使用参数expand=True。这样可以确保将拆分的列扩展为一个数据框。

此外,要进行订购,您应该将week_no转换为整数dtype,否则10将出现在2之前。

df = pd.DataFrame({'week': ['week 0', 'week 1'],
                   'part': ['Breakfast', 'Lunch']})

# assign to expanded split
df[['week', 'week_no']] = df['week'].str.split(expand=True)

# convert to integer
df['week_no'] = df['week_no'].astype(int)

# sort by week number
df = df.sort_values('week_no')

print(df)

        part  week  week_no
0  Breakfast  week        0
1      Lunch  week        1

答案 1 :(得分:0)

处理最后的注释,您的build.sh列中可能会有多余的空间。 例如

Financial Week Name

最后一个条目将使split函数产生一个包含3个元素的行,并因此将其传递给2列

  Financial Week Name   Day Part
    week 0          Breakfast
    week 0          Lunch
    week 0          Dinner
    week 1          Breakfast
    week  1         Lunch

我建议您从该列中提取数字

" ValueError: Columns must be same length as key"

答案 2 :(得分:0)

对于我来说,我在列名称中错误地加上了引号:

Corrected : no_match_df[['matched_url', 'cosine_score', 'jaccard_score', 'score', 'match_type']]
Mistake : no_match_df[['matched_url', 'cosine_score', 'jaccard_score', 'score', 'match_type']]

花了将近3个小时才弄清楚。