#python #pandas #string #dataframe
Вопрос:
учитывая этот фрейм данных, я хочу заменить каждое строковое значение в столбце значением 0. Я пробовал этот код, но фрейм данных остается неизменным. Я не уверен, как изменить параметры этой строки
df['new'].replace(to_replace=r'^
вот весь код:
l2=['a. 12','b. 75','23', 'sc/a 34', '85', 'a 32', 'b 345']
d = {'col1': []}
df = pd.DataFrame(data=d)
df['col1']=l2
df['new'] = np.where(df["col1"].str.isnumeric(),df["col1"].str[:], (df["col1"].str.extract("^([a-z/]*)", expand=False)) )
print(df['new'])
df['new'].replace(to_replace=r'^
таким образом, столбец dataframe должен иметь следующие значения:
0 0 23 0 85 0 0
Комментарии:
1. Это регулярное выражение:
^$
будет соответствовать только пустым строкам. Кроме того, прямой вызов replace без указания inplace=True может не дать желаемых результатов.
Ответ №1:
Ваше регулярное выражение представляет собой пустую строку :
ничего между началом (^) и концом ($) строки.
Вы должны использовать : .*
Ответ №2:
Попробуй to_replace='^', value=0, regex=True, inplace=True
.
То есть: если регулярное выражение совпадает, то это должна быть строка, поэтому замените ее числом 0.
Ссылка: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.replace.html
PS Если вы хотите удалить нечисловые символы, а все числа являются целыми числами, то это может быть то, что вам нужно:
df['new'].replace(to_replace=r'D ', value='', regex=True, inplace=True)
То есть: в каждом значении (все ваши значения в примере являются строками) замените любую последовательность не-цифр пустой строкой.
Комментарии:
1. к сожалению, в вашем решении фрейм данных столбца также остается неизменным
2. Мой предыдущий ответ действительно был неверным.
3. Я попробовал, это не работает
4. Вы пробовали с
bla.replace(…inplace=True)
илиbla = bla.replace(…)
?5. bla = bla.replace(...) работает, но он заменяет каждый отдельный элемент на 0, вероятно, потому, что даже числа являются строковым типом
, value=0, regex=True)
вот весь код:
таким образом, столбец dataframe должен иметь следующие значения:
0 0 23 0 85 0 0
Комментарии:
1. Это регулярное выражение:
^$
будет соответствовать только пустым строкам. Кроме того, прямой вызов replace без указания inplace=True может не дать желаемых результатов.
Ответ №1:
Ваше регулярное выражение представляет собой пустую строку :
ничего между началом (^) и концом ($) строки.
Вы должны использовать : .*
Ответ №2:
Попробуй to_replace='^', value=0, regex=True, inplace=True
.
То есть: если регулярное выражение совпадает, то это должна быть строка, поэтому замените ее числом 0.
Ссылка: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.replace.html
PS Если вы хотите удалить нечисловые символы, а все числа являются целыми числами, то это может быть то, что вам нужно:
То есть: в каждом значении (все ваши значения в примере являются строками) замените любую последовательность не-цифр пустой строкой.
Комментарии:
1. к сожалению, в вашем решении фрейм данных столбца также остается неизменным
2. Мой предыдущий ответ действительно был неверным.
3. Я попробовал, это не работает
4. Вы пробовали с
bla.replace(…inplace=True)
илиbla = bla.replace(…)
?5. bla = bla.replace(...) работает, но он заменяет каждый отдельный элемент на 0, вероятно, потому, что даже числа являются строковым типом
, value=0, regex=True)
print(df['new'])
таким образом, столбец dataframe должен иметь следующие значения:
0 0 23 0 85 0 0
Комментарии:
1. Это регулярное выражение:
^$
будет соответствовать только пустым строкам. Кроме того, прямой вызов replace без указания inplace=True может не дать желаемых результатов.
Ответ №1:
Ваше регулярное выражение представляет собой пустую строку :
ничего между началом (^) и концом ($) строки.
Вы должны использовать : .*
Ответ №2:
Попробуй to_replace='^', value=0, regex=True, inplace=True
.
То есть: если регулярное выражение совпадает, то это должна быть строка, поэтому замените ее числом 0.
Ссылка: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.replace.html
PS Если вы хотите удалить нечисловые символы, а все числа являются целыми числами, то это может быть то, что вам нужно:
То есть: в каждом значении (все ваши значения в примере являются строками) замените любую последовательность не-цифр пустой строкой.
Комментарии:
1. к сожалению, в вашем решении фрейм данных столбца также остается неизменным
2. Мой предыдущий ответ действительно был неверным.
3. Я попробовал, это не работает
4. Вы пробовали с
bla.replace(…inplace=True)
илиbla = bla.replace(…)
?5. bla = bla.replace(…) работает, но он заменяет каждый отдельный элемент на 0, вероятно, потому, что даже числа являются строковым типом
, value=0, regex=True)
вот весь код:
таким образом, столбец dataframe должен иметь следующие значения:
0 0 23 0 85 0 0
Комментарии:
1. Это регулярное выражение:
^$
будет соответствовать только пустым строкам. Кроме того, прямой вызов replace без указания inplace=True может не дать желаемых результатов.
Ответ №1:
Ваше регулярное выражение представляет собой пустую строку :
ничего между началом (^) и концом ($) строки.
Вы должны использовать : .*
Ответ №2:
Попробуй to_replace='^', value=0, regex=True, inplace=True
.
То есть: если регулярное выражение совпадает, то это должна быть строка, поэтому замените ее числом 0.
Ссылка: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.replace.html
PS Если вы хотите удалить нечисловые символы, а все числа являются целыми числами, то это может быть то, что вам нужно:
То есть: в каждом значении (все ваши значения в примере являются строками) замените любую последовательность не-цифр пустой строкой.
Комментарии:
1. к сожалению, в вашем решении фрейм данных столбца также остается неизменным
2. Мой предыдущий ответ действительно был неверным.
3. Я попробовал, это не работает
4. Вы пробовали с
bla.replace(…inplace=True)
илиbla = bla.replace(…)
?5. bla = bla.replace(…) работает, но он заменяет каждый отдельный элемент на 0, вероятно, потому, что даже числа являются строковым типом