我有一个50 gb的csv文件(500 k记录,30 k列),我需要转置到键值对。我计划以块的形式迭代文件,对于每个块,我将进行转置并附加到目标csv文件中。在遍历每个块时,我需要确保每个块都有所有的列名,以便转置正确工作。但是每个块的 Dataframe 大小不同(列计数不同)。我一直在尝试获取列名,并在填充空列后将其添加到每个dataframe块中,以确保大小一致。尝试concat dummy dataframe,但出现错误-NotImplementedError:只能将MultiIndex与MultiIndex或元组的Index联合,请尝试mi.to_flat_index().union(other)。
有什么建议来解决这个问题吗?
obj = s3.get_object(Bucket='bucket', Key = 'xyz.csv')
csv_header = pd.read_csv(obj['Body'], nrows=1).columns
print(csv_header.size)
csv_iterator = pd.read_csv(obj['Body'], iterator=True, chunksize=1)
for csv_chunk in csv_iterator:
#chunk =csv_chunk.set_axis(csv_header,
# axis=1,inplace=True)
#chunk.to_csv('temp_raw.csv',mode = 'a')
#chunk.columns(csv_header)
#chunk = pd.concat([csv_chunk,csv_header],axis=1)
#print(csv_chunk)
#csv_chunk.columns = csv_header
column_size = csv_header.size-csv_chunk.columns.size
print(csv_chunk.columns.size)
print(csv_chunk.shape)
print(column_size)
a=[]
b=[]
for j in range(0, column_size):
b.append(None)
#Append the column to each row.
for i in range(0, 1):
a.append(b)
print(pd.DataFrame(a).shape)
df=pd.DataFrame(csv_chunk)
a=pd.DataFrame(a)
print(df.index)
print(a.index)
chunk=pd.concat([df,a],axis = 1)
# df = pd.concat([pd.DataFrame(csv_chunk),
# pd.DataFrame(a)],axis =1)
# chunk = pd.DataFrame(pd.concat([pd.DataFrame(csv_chunk),
# pd.DataFrame(a)]
# ,axis=1),columns=csv_header)
#print(pd.DataFrame(a).size)
# print(chunk.head(1))
# print(csv_chunk.columns.size)
chunk.to_csv('temp_source.csv',mode = 'a')
out = pd.melt(chunk,
id_vars=['eid'],
value_vars=chunk.columns[1:])
out.to_csv('temp_key_value.csv',mode='a')
尝试concat dummy对象,但出现错误-NotImplementedError:只能将MultiIndex与MultiIndex或元组的Index联合,请尝试mi.to_flat_index().union(other)。
有什么建议来解决这个问题吗?
1条答案
按热度按时间z9gpfhce1#
关于你问题的标题,
df[np.arange(4)]=None
将向预先存在的df Dataframe 添加N=4列:你可以在这里找到你喜欢的其他方式:How to add a new column to an existing DataFrame?
现在,你的转置和多索引因素,是不清楚的,因为缺乏MRVE在你的问题。从csv阅读