我正在使用一段看起来像这样的代码
output_df['test'] = str(output_df['givencolumn'].str[0:2])
我不明白为什么.str [0:2]为什么会在Output_df的测试列中返回类似下面的内容。
尽管看起来很简单,但我无法弄清楚哪里发生了错误。请帮我解决此问题,而无需提供示例文件(机密文件)。
我希望我的测试栏看起来像
Index test
0 01
1 01
2 01
3 01
4 01
所以,我现在想出了问题:-
这正在工作
output_df['test'] = output_df['givencolumn'].str[0:2]
这不起作用:-
starting_position = 0
ending_position = 2
given_data[required_column_name] = given_data['givencolumn'].str[starting_position:ending_position]
我的功能:-
def build_columns(given_data,given_layout):
for i in range(0, 2):
required_column_name = str(given_layout.iloc[i][1])
starting_position = int(given_layout.iloc[i][2])
ending_position = int(given_layout.iloc[i][4])
print(starting_position)
print(ending_position)
given_data[required_column_name] = str(output_df['givencolumn'])
given_data[required_column_name] = given_data['givencolumn'].str[1:2]
return(given_data)
答案 0 :(得分:1)
您不需要str()调用。它是这样的:
df= pd.DataFrame({'test': [
'00',
'012'
'013',
'02'
]})
df['test2']= df['test'].str[:2]
df
不确定,为什么要在列中调用str()。我猜这可能是问题所在,因为.str [:2]生成的不是字符串,而是一个由字符串组成的序列,这就是如果您要分配依赖于其他行值的值,则应分配的内容(或只是行的索引)。可能这是一个误解。如果您执行类似pd.DataFrame ['col'] = scalarValue的操作,则会将值分配给所有行中的字段。但通常您分配系列。对于esample,如果您有一个数字列,说出今年的薪水,并且您想分配明年的薪水(包括5%的加薪),那么您的代码可能看起来像
salrary_df['salary_2020']= salrary_df['salary_2019'] * 1.05
可以看出,大熊猫实际上是为每一行执行此分配的,但这并不是这样做的。实际上,它执行右边的操作,产生一个序列,然后将该序列分配给该列(在内部,它可能会将其复制到共享相同数据类型的多个列的数组中,以提高处理效率)。