#pandas #string #dataframe #replace
Вопрос:
Есть такое поведение, и я не понимаю, почему это происходит.
# Make a dataframe with a column of floats
df = pd.DataFrame(columns=['col1'])
df.loc[0] = 10.0
df.loc[1] = 5.0
df.loc[2] = 6.0
df.loc[3] = 20.0
# Convert the column to string
df['col1'] = df['col1'].astype(str)
# Use .str.replace to replace the decimal points of .0 with nothing
df['col1'].str.replace('.0', '')
Но это возвращает пустую строку для первого и последнего значения
0
1 5
2 6
3
Имя: col1, dtype: объект
Однако, делая это:
# Apply replace in a lambda function
df['col1'].apply(lambda x: x.replace('.0', ''))
И это возвращает ожидаемые результаты
0 10
1 5
2 6
3 20
Имя: col1, dtype: объект
Это как-то связано с тем, что он путает 0.0 с .0?
Есть идеи, почему это происходит?
Ответ №1:
Потому .
что специальный символ регулярного выражения необходим, чтобы избежать его или добавить regex=False
:
df['col2'] = df['col1'].str.replace('.0', '', regex=True)
df['col3'] = df['col1'].str.replace('.0', '', regex=False)
print (df)
col1 col2 col3
0 10.0 10 10
1 5.0 5 5
2 6.0 6 6
3 20.0 20 20
Комментарии:
1. В этом есть смысл! Разница между ними заключается в том, что функция Pandas str.replace принимает регулярное выражение, в то время как стандартная функция замены строки не принимает