python - Python - 从CSV行+列读取返回行号
问题描述
概述
我想根据搜索返回 csv 中列的值。我大部分时间都在那里,但不明白为什么我会得到我现在的结果,以及如何解决它。我正在使用 pandas 0.25 读取 csv。由于 1.03 和 geopandas 交互的一些问题,后来选择了这个版本而不是 1.03。
问题:为什么我收到一个行号,如何从返回的结果中省略行号?
我的代码的一个子集如下:
import numpy as np
import os
import pandas as pd
code_ITS_path = 'input_ITS.csv'
code_ITS = pd.read_csv(code_ITS_path,sep=',')
for trial_name in code_ITS.Trial_Name[code_ITS.Trial_Name.str.contains("Trial")]:
scenario_name = code_ITS.Scenario_Name[code_ITS.Trial_Name.str.contains(trial_name)]
print("Trial Name is " + trial_name)
print("Scenario Name is " + scenario_name)
问题
返回的结果似乎包括“场景名称是”之前的行号,不幸的是,这导致我以后出现问题。因此,打印出 trial_name 有效,但打印出 scenario_name 显示了问题。这里的问题是在scenario_name 之前存在“24”。例如:
Trial Name is 500_10_3_Trial_24
24 Scenario Name is 500_10_3_24
期望的结果
我需要返回:即,scenario_name 不包含行号和制表符缩进
Scenario Name is 500_10_3_25
示例数据
CSV 示例:
Agency,Region,Requesting_Group,Scenario_Name,Type,Scenario_Description,Trial_Name,Notes
15,Main,,500_10_3_B,Operational,Testing,500_10_3_BestEstimate,None
15,Main,,500_10_3_1,Operational,Testing,500_10_3_Trial_1,None
15,Main,,500_10_3_2,Operational,Testing,500_10_3_Trial_2,None
15,Main,,500_10_3_3,Operational,Testing,500_10_3_Trial_3,None
15,Main,,500_10_3_4,Operational,Testing,500_10_3_Trial_4,None
15,Main,,500_10_3_5,Operational,Testing,500_10_3_Trial_5,None
15,Main,,500_10_3_6,Operational,Testing,500_10_3_Trial_6,None
15,Main,,500_10_3_7,Operational,Testing,500_10_3_Trial_7,None
15,Main,,500_10_3_8,Operational,Testing,500_10_3_Trial_8,None
15,Main,,500_10_3_9,Operational,Testing,500_10_3_Trial_9,None
15,Main,,500_10_3_10,Operational,Testing,500_10_3_Trial_10,None
15,Main,,500_10_3_11,Operational,Testing,500_10_3_Trial_11,None
15,Main,,500_10_3_12,Operational,Testing,500_10_3_Trial_12,None
15,Main,,500_10_3_13,Operational,Testing,500_10_3_Trial_13,None
15,Main,,500_10_3_14,Operational,Testing,500_10_3_Trial_14,None
15,Main,,500_10_3_15,Operational,Testing,500_10_3_Trial_15,None
15,Main,,500_10_3_16,Operational,Testing,500_10_3_Trial_16,None
15,Main,,500_10_3_17,Operational,Testing,500_10_3_Trial_17,None
15,Main,,500_10_3_18,Operational,Testing,500_10_3_Trial_18,None
15,Main,,500_10_3_19,Operational,Testing,500_10_3_Trial_19,None
15,Main,,500_10_3_20,Operational,Testing,500_10_3_Trial_20,None
15,Main,,500_10_3_21,Operational,Testing,500_10_3_Trial_21,None
15,Main,,500_10_3_22,Operational,Testing,500_10_3_Trial_22,None
15,Main,,500_10_3_23,Operational,Testing,500_10_3_Trial_23,None
15,Main,,500_10_3_24,Operational,Testing,500_10_3_Trial_24,None
15,Main,,500_10_3_25,Operational,Testing,500_10_3_Trial_25,None
解决方案
scenario_name
是一个系列,这就是打印索引和名称等其他内容的原因。
loc
您可以使用or ,而不是获取列然后对其进行索引iloc
:
import pandas as pd
code_ITS = pd.read_csv("../resources/test.csv")
for trial_name in code_ITS.loc[code_ITS["Trial_Name"].str.contains("Trial"), "Trial_Name"]:
scenario_name = code_ITS.loc[code_ITS["Trial_Name"].str.contains(trial_name), "Scenario_Name"]
print(f"\nTrial Name is:\n{trial_name}\nScenario Name is:\n{scenario_name}")
前几行输出:
Trial Name is:
500_10_3_Trial_1
Scenario Name is:
1 500_10_3_1
10 500_10_3_10
11 500_10_3_11
12 500_10_3_12
13 500_10_3_13
14 500_10_3_14
15 500_10_3_15
16 500_10_3_16
17 500_10_3_17
18 500_10_3_18
19 500_10_3_19
Name: Scenario_Name, dtype: object
Trial Name is:
500_10_3_Trial_2
Scenario Name is:
2 500_10_3_2
20 500_10_3_20
21 500_10_3_21
22 500_10_3_22
23 500_10_3_23
24 500_10_3_24
25 500_10_3_25
Name: Scenario_Name, dtype: object
...
您可以在此处loc
找到有关标准索引与标准索引之间差异的更多信息。
请注意,我使用[ ]
访问列,我发现它比.
/attribute 样式更安全、更方便。
我认为还值得一提的是,您使用的方式Series.str.contains()
可能会导致一些问题。这个例子应该有助于说明原因:
import pandas as pd
df = pd.DataFrame({"col_1": ["training", "restrain"]})
print(df, end="\n\n")
print(df.loc[df["col_1"].str.contains("train"), "col_1"])
输出:
col_1
0 training
1 restrain
0 training
1 restrain
Name: col_1, dtype: object
您的数据遵循相当清晰的模式这一事实是一件好事,您应该能够编写一个可靠的正则表达式来代替使用。
推荐阅读
- asp.net-core - asp.net core 2.1 依赖注入
- swift - 将 ImageView 保持在 Screen Swift 的范围内
- python - '标签 %s 不包含在轴中' % 标签 [掩码])
- asp.net-core - 区域的 UrlHelperExtensions.Page 方法
- google-cloud-platform - Cloud Sql Instance重启挂了好几个小时
- html - 如何将我的(html)登录页面和其他页面链接到我的索引页面
- c# - 通过 Graph API 发布到 Facebook 页面时未显示链接预览
- performance - 在 Gitlab 中加快 CI 进程
- reactjs - 我想在真实聊天中做一个聊天记录。在反应
- c - 链表:抛出异常:读取访问冲突。B 是 0xCDCDCDCD