我正在将数据框中的项目输出到csv。但是,对于某些较旧的下游应用程序来说,这些数据太长了,所以我在每个X项中都有csv add line break,因此输出中的各行不会太长。
示例:
A,B,C,D,E,F,G,H,I,J,K #this is actually a column in the input, rendered horizontal for space
成为文件(X = 3) -
A,B,C
D,E,F
G,H,I
J,K
如果打算使用不均匀的最后一行,那么这种情况就相当普遍了。
实际代码片段:
data = pd.read_csv(infilename, header=None)
size=50
col=0
indexes = np.arange(0,len(data),size) #have to use numpy since range is now an immutable type in python 3
indexes = np.append(indexes,[len(data)]) #add the uneven final index
for i in range(len(indexes)-1):
holder = pd.DataFrame(data.iloc[indexes[i]:indexes[i+1],col]).T
holder.to_csv(outfilename, index=False, header=False)
唯一奇怪的是,尽管没有抛出任何错误,但最终循环(具有不均匀的最终索引)不会写入文件,即使信息被完美地分配给持有者。由于没有抛出任何错误,我无法弄清楚为什么没有写入最终信息。有谁知道什么可能导致最后的写命令失败?
编辑:
好的,我只是尝试对路径进行硬编码并删除所有tkinter。现在,它完美地写入数据,但它不再显示变量模式行为;它会重复覆盖单行数据,但会成功写入最后一行。下面的示例包含一个修改过的for循环来解释此问题。
import pandas as pd
import numpy as np
infilename = 'C:\\Users\\...infile.csv'
data = pd.read_csv(infilename, header=None) #usecols=[0], only get 1st column, specify no header
outfilename = 'C:\\Users\\...test.txt'
size=50 #number of items per line
col=0
indexes = np.arange(0,len(data),size)#have to use numpy since range is now an immutable type in python 3
indexes = np.append(indexes,[len(data)]) #add the uneven final index
for i in range(len(indexes)-1):
holder = pd.DataFrame(data.iloc[indexes[i]:indexes[i+1],col]).T
if i ==0:
holder.to_csv(outfilename, index=False, header=False)
else:
holder.to_csv(outfilename, index=False, header=False, mode='a')
这仍然存在问题,因为我需要最终用户能够在没有技术素养的情况下使用它。