python - 如何使用熊猫从字典中删除行
问题描述
如果我有这样的数据集。
date PCP1 PCP2 PCP3 PCP4
1/1/1985 0 -99 -99 -99
1/2/1985 0 -99 -99 -99
1/3/1985 0 0 -99 -99
1/4/1985 0 0 -99 -99
1/5/1985 1 -99 1 1
1/6/1985 0 -99 -99 -99
1/7/1985 0 1 -99 0
1/8/1985 0 2 -99 3
1/9/1985 0 -99 -99 -99
我想通过只有这样的日期列和一个 PCP 列来创建新的数据框.. 对于 df1..
df1 =
date PCP1
1/1/1985 0
1/2/1985 0
1/3/1985 0
1/4/1985 0
1/5/1985 1
1/6/1985 0
1/7/1985 0
1/8/1985 0
1/9/1985 0
和df2...
df2 =
date PCP2
1/1/1985 -99
1/2/1985 -99
1/3/1985 0
1/4/1985 0
1/5/1985 -99
1/6/1985 -99
1/7/1985 1
1/8/1985 2
1/9/1985 -99
等等 df3 .. 和 df4 ......
我想为每个数据框删除带有-99的行,这将导致......
df1 =
date PCP1
1/1/1985 0
1/2/1985 0
1/3/1985 0
1/4/1985 0
1/5/1985 1
1/6/1985 0
1/7/1985 0
1/8/1985 0
1/9/1985 0
和df2...
df2 =
date PCP2
1/3/1985 0
1/4/1985 0
1/7/1985 1
1/8/1985 2
我不确定我是否做对了,但我编写了以下代码,但我不确定如何在执行 for 循环时删除带有 -99 的行。
# first I created a list of pcp list
n_cols = 4
pcp_list = []
df_names = []
for i in range(1,n_cols):
item = "PCP" + str(i)
pcp_list.append(item)
item_df = "df" + str(i)
df_names.append(item_df)
# and then I have created a new df for each name on the list by creating a dict
dfs ={}
for dfn, name in zip(df_names, pcp_list):
dfs[dfn] = pd.DataFrame(df, columns=['date', name])
# and then I was hoping I could remove the rows with -99
for df, name in zip(dfs, pcp_list):
df[name] = dfs[df[name] = -99]
任何帮助将不胜感激!
谢谢!
解决方案
您可以在字典中创建数据框:
d = {k: v[v != -99].reset_index() for k,v in df.set_index('date').to_dict('series').items()}
不建议按名称创建变量,但可以:
for i, (k, v) in enumerate(df.set_index('date').to_dict('series').items()):
globals()[f'df{i}'] = v[v != -99].reset_index()
推荐阅读
- java - 从 jsp 中的 SELECT OPTIONS 到 servlet 中获取多个选定的 VALUES
- macos - 如何使用 Mamp 中的本地网络 IP 地址从外部设备连接到 htdocs 文件夹
- javascript - 如何在graphql游乐场中打开跟踪面板
- python - 绿色网球台板上线的检测与隔离
- azure-devops - 使用 Katalon 扩展在 Azuredevops 管道上执行自动化测试时出现问题
- filter - Google表格中单元格值与另一张表格中的多列匹配的列总和
- 2sxc - 2sxc 在 mobius 表单中使用一个字段接受多个文件
- go - []interface{}{} 中的双花括号是什么意思
- java - 如何混淆父类但保留子类的方法?
- css - Bootstrap CSS:浏览器尺寸更改时保持卡片按钮位置