【发布时间】:2019-11-14 04:26:30
【问题描述】:
我有 2 个试图从中提取值的数据表。这是我当前的脚本。
import re
import os
import pandas as pd
os.chdir('C:/Users/Sams PC/Desktop')
test1=pd.read_csv('test1.txt', sep='\s+', header=None)
test1.columns=['Column_1','Column_2','Column_3']
test2=pd.read_csv('test2.txt', sep='\s+', header=None)
test2.columns=['Column_1','Column_2','Column_3','Column_4']
if 'S31N' in test1:
data2=nhsqc[['Column_1','Column_2']].copy()
if 'S31N-CA-HN' in test2:
data2=nhsqc[['Column_3']].copy()
else:
print('Not Found')
else:
print('Not Found')
print(test1)
print (test2)
有了这个输出:
Not Found
0 S31N-HN 114.424 7.390
1 Y32N-HN 121.981 7.468
Column_1 Column_2 Column_3 Column_4
0 S31N-A30CA-S31HN 114.424 54.808 7.393
1 S31N-A30CA-S31HN 126.854 53.005 9.277
2 S31N-CA-HN 114.424 61.717 7.391
3 S31N-HA-HN 126.864 59.633 9.287
4 Y32N-S31CA-Y32HN 121.981 61.674 7.467
5 Y32N-CA-HN 121.981 60.789 7.469
6 Q33N-Y32CA-Q33HN 120.770 60.775 8.582
我可以使用 pandas 来组织表格。接下来我想从与“S31N”相关的列中提取值。但是,如您所见,我的 if 行在查找 S31N 方面不起作用,即使它确实存在于我的数据表中。现在,如果我将该值更改为我的标题(如果 test1: 中的“Column_1”),那么它将起作用。我不完全明白为什么它无法搜索实际表,而只是搜索列标题。
此外,虽然我的 if 行确实有效(如果我使用了列标题),但第二个 if 行会从第一个 if 行覆盖 data2 表。如何将它作为额外的列添加到 data2 而不是覆盖它。
问题解决后,我删除了第二部分。但是主要问题仍然存在,我的脚本仍然无法找到我的值。更新脚本:
x=re.findall('[A-Z][0-9][0-9][A-Z]',str(test1))
y=re.findall('[A-Z][0-9][0-9][A-Z]-[C][A]',str(test2))
print (x,y)
for i in range (0,2):
if x[i] in test1:
data2=nhsqc[['Column_1','Column_2']].copy()
if y[i] in test2:
data2=nhsqc[['Column_3']].copy()
print (data2)
else:
print('Not Found')
else:
print('Not Found')
print(x[i])
输出:
['S31N', 'Y32N'] ['S31N-CA', 'Y32N-CA']
Not Found
Not Found
Y32N
【问题讨论】:
-
这仍然给了我同样的错误。 r 是做什么的?我一直在使用这个w3schools.com/python/python_regex.asp 来理解正则表达式,他们也有那个 r,但他们没有解释它的作用。
-
对于类型,这是输出:
至于 str(test1),实际上最终可以工作。这是输出: ['S31N', 'Y32N'] ['S31N-CA', 'Y32N-CA'] 虽然,我不太清楚为什么会这样。据我了解, re.findall 中的第二个值只是告诉它要搜索的文档。我不明白 str 在这里做什么。如果我还将 if 行更改为: if str('x') in test1: 我仍然找不到输出。最后一件事,r 是否存在并没有什么不同,所以我仍然不知道它到底在做什么。 -
啊我明白了,所以它在我的文档中找不到单词的原因是因为它们是单词而不是字符串? IE。它们的格式不正确?因为如果我将输入更改为现在:如果 test1 中的 x[0]:我仍然得到输出“未找到”
-
我的正则表达式给出了正确的输出和值(所以 x[0] 给了我与'S31N'相同的东西),这正是我想要搜索的。我基本上是在尝试让我的脚本搜索我的数据,如果找到 S31N,则将其氮和氢(第 2 列和第 3 列)值“复制”到新表(data2)中。问题是我的脚本说值(S31N)不存在,即使它在我的表中如果我打印(test1)。