Python子字符串数据框列无法正常工作

时间:2019-06-07 10:08:50

标签: python-3.x pandas

我正在使用一段看起来像这样的代码

output_df['test'] = str(output_df['givencolumn'].str[0:2])

我不明白为什么.str [0:2]为什么会在Output_df的测试列中返回类似下面的内容。

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)

1 个答案:

答案 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

可以看出,大熊猫实际上是为每一行执行此分配的,但这并不是这样做的。实际上,它执行右边的操作,产生一个序列,然后将该序列分配给该列(在内部,它可能会将其复制到共享相同数据类型的多个列的数组中,以提高处理效率)。