如何将我的输出按列保存到csv

时间:2019-12-24 03:44:25

标签: python pandas

第一个函数必须返回到data.csv文件中的第一列col1,第二个函数必须返回第二列col2。我编写了一个代码,但无法保存。

def func1(testvalue):
    json_d = {"task_id": "user_uid","data": {"document1":testvalue}} 
    response = requests.post("https://example.net/document",headers=headers,json=json_d)
    my_data1 = response.text
    file = open("data.csv","a+")
    file.write(my_data1)
    file.close()
    my_data = json.loads(my_data1)
    result = {'bool':my_data['data']}
    return result

def func2(testvalue):
    test = {"data": {"doc1":testvalue}} 
    response = requests.post("https://example.net/v3/docs",headers=headers,json=test)
    my_data2 = response.text
    file = open("data.csv","a+")
    file.write(my_data2)
    file.close()
    my_data = json.loads(my_data2)
    result = {'bool':my_data['data']}
    return result

df['res'] = df['test'].apply(func1) >>将file.write(my_data1)保存到数据的第一列,df['test'].apply(func1)file.write(my_data2)保存到data.csv的第二列

1 个答案:

答案 0 :(得分:1)

解决方案

如果我正确理解您的要求,则希望将每一列另存为单独的.csv文件。您可以使用pandas.DataFrame.to_csv轻松地做到这一点。

现在假设您想一次将一列保存到一个.CSV 文件中。在这种情况下,您可以简单地合并存储在您创建的每个文件中的列数据,如下所示,然后将其与所有信息一起保存为单独的csv文件。如果需要,还可以在合并单个文件后将其删除。

  

这里,我们创建一个包含列xy的虚拟数据帧,然后使用.csv将它们分别写入该列的pandas.DataFrame.to_csv文件,如下所示,最后检查在output_path创建的文件列表。

# Imports
import numpy as np
import pandas as pd
import os

# Make dummy dataframe
df = pd.DataFrame({'x': np.arange(10), 'y': np.arange(10)**2})

# Define your output_path
output_path = os.getcwd() + '/output'
if not os.path.exists(output_path):
    os.makedirs(output_path)

# Write individual CSV files for each column
for col_name in df.columns:
    df[col_name].to_csv(path_or_buf=os.path.join(output_path, col_name + '.csv'), index=False)

# Check/Enlist contents in the output-path
print(sorted(os.listdir(output_path)))

输出

['x.csv', 'y.csv']
  

阅读每一列并一起写入一个CSV文件

files = sorted(os.listdir(output_path))
df2 = pd.DataFrame()
for i, filename in enumerate(files):
    if filename not in ['out.csv']:
        col_name = filename.replace('.csv', '')  
        print('filename: {} | col_name: {}'.format(filename, col_name))  
        col_df = pd.read_csv(os.path.join(output_path, filename))    
        if i==0:
            df2.reindex(index = col_df.index)
        df2[col_name] = col_df['0']

# Write all columns to a single CSV
df2.to_csv(os.path.join(output_path, 'out.csv'))