我有一个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未能成功切出这些值。我很沮丧。任何帮助将不胜感激。
答案 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个小时才弄清楚。