操纵数据框系列
Manipulate Dataframe Series
我有一个数据框,我想根据条件更改列的某些元素。
特别是鉴于此专栏:
... VALUE ....
0
"1076A"
12
9
"KKK0139"
5
我想获得这个:
... VALUE ....
0
"1076A"
12
9
"0139"
5
在'VALUE'列中既有字符串又有数字,当我在字符串值中找到特定的子字符串时,我想获得没有该子字符串的相同值。
我试过:
1) df['VALUE'] = np.where(df['VALUE'].str.contains('KKK', na=False), df['VALUE'].str[3:], df['VALUE'])
2) df.loc[df['VALUE'].str.contains('KKK', na=False), 'VALUE'] = df['VALUE'].str[3:]
但这两次尝试returns一个IndexError:标量变量的索引无效
一些建议?
>>> df['VALUE'].str.replace(r'KKK', '')
0 0
1 1076A
2 12
3 9
4 0139
5 5
Name: VALUE, dtype: object
您的第二个解决方案失败,因为您还需要将行选择器应用到作业的右侧。
df.loc[df['VALUE'].str.contains('KKK', na=False), 'VALUE'] = df.loc[df['VALUE'].str.contains('KKK', na=False), 'VALUE'].str[3:]
查看您的示例数据,如果 k
是唯一的问题,只需将其替换为空字符串
df['VALUE'].str.replace('K', '')
0 0
1 "1076A"
2 12
3 9
4 "0139"
5 5
Name: text, dtype: object
如果您想对 k 的特定出现或位置执行此操作,您也可以这样做。
由于该列同时包含数值(非字符串)和字符串值,您不能使用 .str.replace()
,因为它只处理字符串。您必须改用 .replace()
。否则,非字符串元素将被 str.replace()
.
转换为 NaN
在这里,您可以使用:
df['VALUE'] = df['VALUE'].replace(r'KKK', '', regex=True)
输入:
data = {'VALUE': [0, "1076A", 12, 9, "KKK0139", 5]}
df = pd.DataFrame(data)
结果:
0 0
1 1076A
2 12
3 9
4 0139
5 5
Name: VALUE, dtype: object
如果你使用.str.replace()
,你将得到:
注意数值的 NaN
值结果(不是字符串类型)
0 NaN
1 1076A
2 NaN
3 NaN
4 0139
5 NaN
Name: VALUE, dtype: object
一般情况下,如果要删除前导字母子串,可以使用:
df['VALUE'] = df['VALUE'].replace(r'^[A-Za-z]+', '', regex=True)
我有一个数据框,我想根据条件更改列的某些元素。 特别是鉴于此专栏:
... VALUE ....
0
"1076A"
12
9
"KKK0139"
5
我想获得这个:
... VALUE ....
0
"1076A"
12
9
"0139"
5
在'VALUE'列中既有字符串又有数字,当我在字符串值中找到特定的子字符串时,我想获得没有该子字符串的相同值。 我试过:
1) df['VALUE'] = np.where(df['VALUE'].str.contains('KKK', na=False), df['VALUE'].str[3:], df['VALUE'])
2) df.loc[df['VALUE'].str.contains('KKK', na=False), 'VALUE'] = df['VALUE'].str[3:]
但这两次尝试returns一个IndexError:标量变量的索引无效
一些建议?
>>> df['VALUE'].str.replace(r'KKK', '')
0 0
1 1076A
2 12
3 9
4 0139
5 5
Name: VALUE, dtype: object
您的第二个解决方案失败,因为您还需要将行选择器应用到作业的右侧。
df.loc[df['VALUE'].str.contains('KKK', na=False), 'VALUE'] = df.loc[df['VALUE'].str.contains('KKK', na=False), 'VALUE'].str[3:]
查看您的示例数据,如果 k
是唯一的问题,只需将其替换为空字符串
df['VALUE'].str.replace('K', '')
0 0
1 "1076A"
2 12
3 9
4 "0139"
5 5
Name: text, dtype: object
如果您想对 k 的特定出现或位置执行此操作,您也可以这样做。
由于该列同时包含数值(非字符串)和字符串值,您不能使用 .str.replace()
,因为它只处理字符串。您必须改用 .replace()
。否则,非字符串元素将被 str.replace()
.
NaN
在这里,您可以使用:
df['VALUE'] = df['VALUE'].replace(r'KKK', '', regex=True)
输入:
data = {'VALUE': [0, "1076A", 12, 9, "KKK0139", 5]}
df = pd.DataFrame(data)
结果:
0 0
1 1076A
2 12
3 9
4 0139
5 5
Name: VALUE, dtype: object
如果你使用.str.replace()
,你将得到:
注意数值的 NaN
值结果(不是字符串类型)
0 NaN
1 1076A
2 NaN
3 NaN
4 0139
5 NaN
Name: VALUE, dtype: object
一般情况下,如果要删除前导字母子串,可以使用:
df['VALUE'] = df['VALUE'].replace(r'^[A-Za-z]+', '', regex=True)