Python-如何在不创建文件的情况下制作CSV数据示例?
我想测试连接多个CSV文件以生成单个数据帧:Python-如何在不创建文件的情况下制作CSV数据示例?,python,pandas,dataframe,csv,unit-testing,Python,Pandas,Dataframe,Csv,Unit Testing,我想测试连接多个CSV文件以生成单个数据帧: pd_df = pd.concat(pd.read_csv(f, header=0) for f in csv_files_data) 这导致ValueError:无效的文件路径或缓冲区对象类型: 我正在创建如下CSV数据示例: csv_data_1 = [['ID', 'Metric_1', 'ProcessDate'], ['1', '-10.5', '1/12/2007'],
pd_df = pd.concat(pd.read_csv(f, header=0) for f in csv_files_data)
这导致ValueError:无效的文件路径或缓冲区对象类型:
我正在创建如下CSV数据示例:
csv_data_1 = [['ID', 'Metric_1', 'ProcessDate'],
['1', '-10.5', '1/12/2007'],
['2', '25.0', '1/22/2010']]
csv_data_2 = [['ID', 'Metric_1', 'ProcessDate'],
['3', '7.9', '10/14/2015'],
['4', '50.0', '5/19/2020']]
csv_files_data = [csv_data_1, csv_data_2]
我故意不读取csv文件,并试图在测试代码中创建数据示例。有没有一种方法可以正确创建这样的CSV示例,我可以将其传递给pd.read\u CSV 此代码是否适合您的需要
pd_df = pd.concat(pd.DataFrame(f) for f in csv_files_data)
该方法适用于文件对象或缓冲区
编辑:
您可以将列表转储到数据文件对象中,如果您不介意使用numpy,那么这是一个解决方案:
from tempfile import TemporaryFile
fil_data_1 = TemporaryFile()
fil_data_2 = TemporaryFile()
csv_data_1 = np.array(csv_data_1)
csv_data_2 = np.array(csv_data_2)
np.savetxt(fil_data_1, csv_data_1, fmt='%s %s %s')
np.savetxt(fil_data_2, csv_data_2, fmt='%s %s %s')
# Simulate closing and reopening of files
_ = fil_data_1.seek(0)
_ = fil_data_2.seek(0)
pd_df = pd.concat(pd.read_csv(f, header=0) for f in [fil_data_1, fil_data_2])
上面的代码使用模块生成临时文件
其中可以转储从列表生成的numpy数组。相应的输出为:
ID Metric_1 ProcessDate
0 1 -10.5 1/12/2007
1 2 25.0 1/22/2010
0 3 7.9 10/14/2015
1 4 50.0 5/19/2020
此代码是否适合您的需要
pd_df = pd.concat(pd.DataFrame(f) for f in csv_files_data)
该方法适用于文件对象或缓冲区
编辑:
您可以将列表转储到数据文件对象中,如果您不介意使用numpy,那么这是一个解决方案:
from tempfile import TemporaryFile
fil_data_1 = TemporaryFile()
fil_data_2 = TemporaryFile()
csv_data_1 = np.array(csv_data_1)
csv_data_2 = np.array(csv_data_2)
np.savetxt(fil_data_1, csv_data_1, fmt='%s %s %s')
np.savetxt(fil_data_2, csv_data_2, fmt='%s %s %s')
# Simulate closing and reopening of files
_ = fil_data_1.seek(0)
_ = fil_data_2.seek(0)
pd_df = pd.concat(pd.read_csv(f, header=0) for f in [fil_data_1, fil_data_2])
上面的代码使用模块生成临时文件
其中可以转储从列表生成的numpy数组。相应的输出为:
ID Metric_1 ProcessDate
0 1 -10.5 1/12/2007
1 2 25.0 1/22/2010
0 3 7.9 10/14/2015
1 4 50.0 5/19/2020
您可以手动将列表转换为符合要求的csv字符串,然后将其写入io流: 输入io 作为pd进口熊猫 def列出了_至_CSV列表: 从每个列表中创建一个逗号分隔的字符串, 然后用换行符连接字符串 行='\n'。连接[','。连接[el代表行中的el]代表列表中的行] 返回io.StringIOlines csv_数据_1=[['ID','Metric_1','ProcessDate'], ['1', '-10.5', '1/12/2007'], ['2', '25.0', '1/22/2010']] csv_data_2=[['ID','Metric_1','ProcessDate'], ['3', '7.9', '10/14/2015'], ['4', '50.0', '5/19/2020']] csv_文件_数据=[csv_数据_1、csv_数据_2中数据的列表_至_csvdata] pd_df=pd.concatpd.read_csvf,头=0表示csv_文件_数据中的f printpd_df 这将产生:
ID Metric_1 ProcessDate
0 1 -10.5 1/12/2007
1 2 25.0 1/22/2010
0 3 7.9 10/14/2015
1 4 50.0 5/19/2020
您可以手动将列表转换为符合要求的csv字符串,然后将其写入io流: 输入io 作为pd进口熊猫 def列出了_至_CSV列表: 从每个列表中创建一个逗号分隔的字符串, 然后用换行符连接字符串 行='\n'。连接[','。连接[el代表行中的el]代表列表中的行] 返回io.StringIOlines csv_数据_1=[['ID','Metric_1','ProcessDate'], ['1', '-10.5', '1/12/2007'], ['2', '25.0', '1/22/2010']] csv_data_2=[['ID','Metric_1','ProcessDate'], ['3', '7.9', '10/14/2015'], ['4', '50.0', '5/19/2020']] csv_文件_数据=[csv_数据_1、csv_数据_2中数据的列表_至_csvdata] pd_df=pd.concatpd.read_csvf,头=0表示csv_文件_数据中的f printpd_df 这将产生:
ID Metric_1 ProcessDate
0 1 -10.5 1/12/2007
1 2 25.0 1/22/2010
0 3 7.9 10/14/2015
1 4 50.0 5/19/2020
然后可能使用文件对象列表?是否可以将我的数据样本传递到缓冲区?@samba我已经编辑了我的答案。现在,列表被转储到文件对象中,然后由pandas处理。希望能有帮助。那么也许可以使用文件对象列表?可以将我的数据样本传递到缓冲区吗?@samba我已经编辑了我的答案。现在,列表被转储到文件对象中,然后由pandas处理。希望有帮助。