使用格式化为字符串的数字列表删除包含这些值的数据框中的行
using list of numbers formatted as strings to delete the rows in a dataframe containing those values
我正在尝试从数据框中删除所有行,如果该行包含多个可能的字符串,这些字符串可能是“2 年”、“3 年”或“4 年”等等,一直向上高达“30 岁”。
为了干净地做到这一点,我想在一行中做到这一点。所以我正在尝试编写代码以使用字符串格式一次引用所有这些数字。
如果我只想删除包含“12 岁”的行,此行适用于此:
df_x = df_x[df_x.Col.str.contains('%d Yrs' % 12) == False]
其中:
df_x 是我的数据框
col 是我的专栏名称
所以....
如何删除包含“2 年”、“3 年”、“4 年”等所有可能字符串的所有行?
这是我的尝试:
year_numbers = range(0,30)
number_of_years = list(year_numbers)
df_x = df_x[df_x.Col.str.contains('%d Yrs' % tuple(number_of_years)) == False]
输出:
TypeError: not all arguments converted during string formatting
怎么样:
remove_years = ['{} Yrs'.format(x) for x in range(30)]
mask = df_x['Col'].apply(lambda x: x in remove_years)
df_x = df_x[mask]
如果需要,您可以合并最后两行
您可以使用正则表达式 str.contains
:
df_x[~df_x.Col.str.contains(r'\d+ Yrs')]
\d+
将匹配任意数量的数字(但至少需要一个),因此它也将匹配 O Yrs
、1000 Yrs
等。
IIUC:
import re
In [142]: df
Out[142]:
Col
0 aaa 1 Yrs bbb
1 aaa 2 yrs bbb
2 aaa 3 Yrs bbb
3 aaa 10 yrs bbb
4 aaa 30 Yrs bbb
5 aaa 31 yrs bbb
6 aaa 50 Yrs bbb
7 xxxxxxxxxxxxxx
In [143]: df[~pd.to_numeric(df.Col.str.extract(r'(\d+)\s+yrs', flags=re.I, expand=False),
...: errors='coerce')
...: .between(2, 30)]
...:
Out[143]:
Col
0 aaa 1 Yrs bbb
5 aaa 31 yrs bbb
6 aaa 50 Yrs bbb
7 xxxxxxxxxxxxxx
我正在尝试从数据框中删除所有行,如果该行包含多个可能的字符串,这些字符串可能是“2 年”、“3 年”或“4 年”等等,一直向上高达“30 岁”。
为了干净地做到这一点,我想在一行中做到这一点。所以我正在尝试编写代码以使用字符串格式一次引用所有这些数字。
如果我只想删除包含“12 岁”的行,此行适用于此: df_x = df_x[df_x.Col.str.contains('%d Yrs' % 12) == False]
其中:
df_x 是我的数据框
col 是我的专栏名称
所以....
如何删除包含“2 年”、“3 年”、“4 年”等所有可能字符串的所有行?
这是我的尝试:
year_numbers = range(0,30)
number_of_years = list(year_numbers)
df_x = df_x[df_x.Col.str.contains('%d Yrs' % tuple(number_of_years)) == False]
输出:
TypeError: not all arguments converted during string formatting
怎么样:
remove_years = ['{} Yrs'.format(x) for x in range(30)]
mask = df_x['Col'].apply(lambda x: x in remove_years)
df_x = df_x[mask]
如果需要,您可以合并最后两行
您可以使用正则表达式 str.contains
:
df_x[~df_x.Col.str.contains(r'\d+ Yrs')]
\d+
将匹配任意数量的数字(但至少需要一个),因此它也将匹配 O Yrs
、1000 Yrs
等。
IIUC:
import re
In [142]: df
Out[142]:
Col
0 aaa 1 Yrs bbb
1 aaa 2 yrs bbb
2 aaa 3 Yrs bbb
3 aaa 10 yrs bbb
4 aaa 30 Yrs bbb
5 aaa 31 yrs bbb
6 aaa 50 Yrs bbb
7 xxxxxxxxxxxxxx
In [143]: df[~pd.to_numeric(df.Col.str.extract(r'(\d+)\s+yrs', flags=re.I, expand=False),
...: errors='coerce')
...: .between(2, 30)]
...:
Out[143]:
Col
0 aaa 1 Yrs bbb
5 aaa 31 yrs bbb
6 aaa 50 Yrs bbb
7 xxxxxxxxxxxxxx