python - 如何让 pandas str.contains() 正确选择带有“Virginia”和“West Virginia”的行?
问题描述
我正在尝试解析包含状态列的 csv。我想从一个聚合的 csv 中为每个单独的状态制作一个 csv。该代码为“Virginia”和“West Virginia”创建了一个数据框,但问题是“Virginia”df 还包含所有“West Virginia”行。有想法该怎么解决这个吗?通过设置 regex=False,我能够解决与“Arkansas”和“Kansas”相同的问题。
df = pd.read_csv(io.StringIO(stat.decode('utf-8')))
states = parse(df, 'state')
write_states(df, states)
def parse(df, suffix):
df = df.sort_values(by=[suffix])
df = df[suffix]
df = df.drop_duplicates()
df = [df for df in df]
return df
def write_states(df, states):
mk_dir('states')
print(f"writing to '{os.path.join(os.getcwd(), 'states')}'")
d = df
s = tqdm(states, ncols=103, leave=False, ascii=' #')
for state in s:
s.set_description(state)
df = d[d['state'].str.contains(state, regex=False)]
dates = np.array(df['date'], dtype='datetime64')
states = np.array(df['state'])
total_cases = np.array(df['cases'], dtype='int64')
total_deaths = np.array(df['deaths'], dtype='int64')
new_cases = get_diff(total_cases)
new_deaths = get_diff(total_deaths)
df = pd.DataFrame({'date': dates, 'state': states, 'total cases': total_cases,
'total deaths': total_deaths, 'new cases': new_cases, 'new deaths': new_deaths})
df.to_csv(f"states/{state}.csv", index=False)
解决方案
添加^
和$
到正则表达式怎么样?这应该可以处理诸如 West/Virginia、Ar/kansas 等的歧义。
df = d[d['state'].str.contains(f'^{state}$', case=False)]
推荐阅读
- python - Pandas 多列 groupby 绘图以在 x 轴上显示第一级组
- c# - for-loop calling strings to turn into booleans
- file - Arduino:使用 SdFat 获取文件名
- python - 选择排序问题(学生分数)
- php - Shopify - 通过多个变体 ID 检索多个变体详细信息
- php - PHP - 在带有 Slim 3 withRedirect() 响应的 Twig 视图上显示验证消息
- python - 验证具有重复键的二叉搜索树
- r - 如何根据行修改矩阵的行(制作 Haar 矩阵)
- python - Django 无法识别 Gensim
- android - Android Studio 选择布局不起作用(Material.NoActionBar.Fullscreen)