如何使用python中数据帧生成的结果写入csv?

如何使用python中数据帧生成的结果写入csv?,python,csv,pandas,Python,Csv,Pandas,我正在使用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: csvfwr

我正在使用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文件中正确写入此数据

建议的答案很有效,但是,我需要检查多个条件。我有一个列表,其中包含一些值:

VAL=['hello','foo','bar'] 所有行的其中一列的值类似于“hello,foo,bar”。我需要做两个检查,一个是VAL列表中是否有任何值出现在值为“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']

您可以按如下方式筛选值:

df[df['RESULT'].str.lower().str.contains(expected_value.lower())].to_csv(filename)
expected_values = [expected_value1, expected_value2, expected_value3]
df[df['Result'].isin(expected_values)]
这将用于筛选包含
预期值的值,就像您在代码中所做的那样。
如果要获得精确匹配,可以使用:

df.loc[df['Result'].str.lower() == expected_value.lower()].to_csv(filename)
正如您在评论中所建议的,对于多个标准,您需要以下内容:

df[df['RESULT'].str.lower().str.contains(expected_value.lower())].to_csv(filename)
expected_values = [expected_value1, expected_value2, expected_value3]
df[df['Result'].isin(expected_values)]
更新:

要根据多个条件进行筛选并筛选所需列,请执行以下操作:

df.ix[df.isin(vals).any(axis=1)].loc[df['Result'].str.lower() == expected_value.lower()].to_csv(filename)

您可以按如下方式筛选值:

df[df['RESULT'].str.lower().str.contains(expected_value.lower())].to_csv(filename)
expected_values = [expected_value1, expected_value2, expected_value3]
df[df['Result'].isin(expected_values)]
这将用于筛选包含
预期值的值,就像您在代码中所做的那样。
如果要获得精确匹配,可以使用:

df.loc[df['Result'].str.lower() == expected_value.lower()].to_csv(filename)
正如您在评论中所建议的,对于多个标准,您需要以下内容:

df[df['RESULT'].str.lower().str.contains(expected_value.lower())].to_csv(filename)
expected_values = [expected_value1, expected_value2, expected_value3]
df[df['Result'].isin(expected_values)]
更新:

要根据多个条件进行筛选并筛选所需列,请执行以下操作:

df.ix[df.isin(vals).any(axis=1)].loc[df['Result'].str.lower() == expected_value.lower()].to_csv(filename)

您应该创建一个数据框,其中有一列“RESULT”和一列“EXPECTED”

然后,您可以使用以下方法筛选匹配的行,并仅将这些行输出到csv:

df.ix[df['EXPECTED']==df['RESULT']].to_csv(filename)

您应该创建一个数据框,其中有一列“RESULT”和一列“EXPECTED”

然后,您可以使用以下方法筛选匹配的行,并仅将这些行输出到csv:

df.ix[df['EXPECTED']==df['RESULT']].to_csv(filename)

首先,我不会尝试用数字的字符串表示法来比较数字……如果小数点的位置有多有少,这是行不通的。请将它们转换为浮点数并检查是否相等。第二,你不能在pandas中进行修改,然后使用df.to_csv(file_to_write)
输出完整的csv文件吗?我如何在pandas中进行修改?此外,是否可以使用我感兴趣的行创建一个单独的数据框?首先,我不会尝试使用它们的字符串表示法来比较数字…如果小数位数或多或少,这将不起作用。将它们转换为浮点并检查是否相等。第二,你不能在pandas中进行修改,然后使用df.to_csv(file_to_write)
输出完整的csv文件吗?我如何在pandas中进行修改?此外,是否可以使用我感兴趣的行创建一个单独的数据帧?您确定
结果
是数字的吗?他在任何问题上都没有提到,为什么?也许你是对的:)顺便说一句,只需在你的代码中添加
df['EXPECTED']=EXPECTED\u value
,因为如果你是正确的,你的解决方案会更好,如果你问我的话,那部分就不存在了。是的,结果字段可能是数字的,也可能不是数字的,这就是为什么我将其视为字符串。这种方法看起来不错,我正在尝试使用@BorisSure的多个检查条件,我添加了另一种可能有用的方法。您还可以结合第一种和最后一种方法来转换为字符串并查找多个条件。如果您仍然可以在@borisar查看问题定义,我已经更新了我的问题定义。您确定
结果
是数字吗?他在任何问题上都没有提到,为什么?也许你是对的:)顺便说一句,只需在你的代码中添加
df['EXPECTED']=EXPECTED\u value
,因为如果你是正确的,你的解决方案会更好,如果你问我的话,那部分就不存在了。是的,结果字段可能是数字的,也可能不是数字的,这就是为什么我将其视为字符串。这种方法看起来不错,我正在尝试使用@BorisSure的多个检查条件,我添加了另一种可能有用的方法。您还可以将第一种方法和最后一种方法结合起来,转换为字符串并查找多个条件。如果您仍然可以像一个好方法一样在BorisLooks中查看问题定义,我已经更新了我的问题定义。我正在检查一个需要检查多个条件的案例@JulienArrecMore,文件中的某些行包含NA/NAN值。如果你想在你的问题中加入一个有助于测试你的特定应用程序的方法,它会抛出一个错误“不能用包含NA/NaN值的向量索引”。我正在检查一个需要检查多个条件的案例@JulienArrecMore,文件中的某些行包含NA/NAN值。如果您想在问题中包含一个有助于测试特定应用程序的变量,则会抛出一个错误“无法使用包含NA/NaN值的向量进行索引”