【发布时间】:2017-04-13 07:08:29
【问题描述】:
我正在使用 Python 中 Pandas 模块中的 DataFrame 从 tsv 文件中读取数据。
df = pandas.DataFrame.from_csv(filename, sep='\t')
该文件有大约 5000 列(4999 个测试参数和 1 个结果/输出值)。
我遍历整个 tsv 文件并检查结果值是否与预期值匹配。然后我将这一行写入另一个 csv 文件中。
expected_value = 'some_value'
with open(file_to_write, 'w') as csvfile:
csvfwriter = csv.writer(csvfile, delimiter='\t')
for row in df.iterrows():
result = row['RESULT']
if expected_value.lower() in str(result).lower():
csvwriter.writerow(row)
但在输出 csv 文件中,结果不正确,即各个列值没有进入它们各自的列/单元格。它被附加为行。如何在 csv 文件中正确写入这些数据?
建议的答案效果很好,但是我需要检查多个条件。我有一个包含一些值的列表:
vals = ['hello', 'foo', 'bar'] 所有行的一列具有类似于“hello,foo,bar”的值。我需要做两项检查,一项是 vals 列表中的任何值是否存在于值为 'hello, foo, bar' 的列中,或者结果值是否与预期值匹配。我写了以下代码
df = pd.DataFrame.from_csv(filename, sep='\t')
for index, row in df.iterrows():
csv_vals = row['COL']
values = str(csv_vals).split(",")
if(len(set(vals).intersection(set(values))) > 0 or expected_value.lower() in str(row['RESULT_COL'].lower()):
print row['RESULT_COL']
【问题讨论】:
-
首先,我不会尝试使用它们的字符串表示来比较数字......如果你有更多或更少的小数位等,它将不起作用。将它们转换为浮动并检查是否相等。其次,你不能只在pandas中进行修改,然后使用
df.to_csv(file_to_write)输出一个完整的csv文件吗? -
如何在pandas中进行修改?此外,是否可以使用我感兴趣的行创建一个单独的数据框?