замените каждое строковое значение на 0

#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, вероятно, потому, что даже числа являются строковым типом