本博文借助笔者可以自己根据数据生成csv文件,重新生成一组csv文件,避免将str内复杂的列表读取成str之后难以操作的问题,本博客记录该解决方案的背景和方法。
1. 背景
在将一些数据从一个平台,换到另一个平台去处理时,使用了常用的csv文件去存储数据。
最开始时,直接将narry格式数据,用dic字典处理,暴力存储过程,产生了错误。
d = {'feature':test_fea, 'label':y_test}
import pandas as pd
df = pd.DataFrame(d, index=[0])
df.to_csv('ayi.csv')
# test_fea.shape() (1084,10)
# y_test.shape (1084,)
上端代码会直接报错,按照错误指示,参考一些教程,将两个数据粗暴转换成单列表元素,代码修改如下,即可正常转换为csv文件。
d = {'feature':[test_fea], 'label':[y_test]}
import pandas as pd
df = pd.DataFrame(d, index=[0])
df.to_csv('ayi.csv')
然而,用另一个平台读取该数据时,该dataframe仅有一个元素。
import pandas as pd
df = pd.read_csv('ayi.csv')
df.head()
fea = df.iloc[0,1]
此时的输出结果,是一个str格式,大致类似于‘[[1,2,3]\n[3,4,5].....[2,4,6]]'。
为了得到列表,考虑过用正特表达式的方法,有一篇博文也是这么用的。但是在我的环境下,代码比较繁琐。借助自己可以修改cdv的优势,重新生层一组csv文件并读取。
2.解决方法
关键在于对csv的生成和处理方法,将直接pd.DataFrame(dic),df.to_csv()换成以下方法。
with open('ayi.csv','w', newline='') as csvfile:
writer = csv.writer(csvfile)
for row in list(y_test):
writer.writerow(row)
写入之后的文件,打开就变得更人性化了。
随后正常读取:
label = pd.read_csv('ayi.csv')
label.head()
可以正常显示所有的数组数据,解决读取后是str的问题。
3. 总结
写入csv文件时候,按行写入每一个维度数据,可避免读取后数组变为str的尴尬。