to_CSV 将 np.array 保存为字符串而不是列表

Posted

技术标签:

【中文标题】to_CSV 将 np.array 保存为字符串而不是列表【英文标题】:to_CSV saves np.array as string instead of as a list 【发布时间】:2019-07-12 04:27:01 【问题描述】:

我想将 pandas 数据框保存为 csv 文件,问题是 to_csv 正在将 np.array 转换为字符串。

我想将数组保存为数组,我在文档中找不到任何有用的内容。

sudoku_solution = [a for a in assignment if a > 0]


label = np.reshape(np.array(sudoku_solution*n_splits), 
                   (n_splits, len(sudoku_solution)))

df = pd.DataFrame(zip(label))

path = './data/SplitsLabel.csv'
try:
    df.to_csv(path_or_buf = path, 
              mode = 'a',
              header = False)

solution_sudoku = [123, 345, 894, 324, 321, 321](整数列表)

n_splits = 3(整数)

最终结果应该是这样的:

0,[123 345 894 324 321 321]

1,[123 345 894 324 321 321]

3,[123 345 894 324 321 321]

但现在的结果是:

0,"[123 345 894 324 321 321]"

1,"[123 345 894 324 321 321]"

3,"[123 345 894 324 321 321]"

如何去掉那些引号?

【问题讨论】:

你不能在.csv中保存python对象;它只是一个文本文件,无法知道listnumpy.array 是什么。如果您需要序列化 ​​python 对象,请查看pickle 格式(pandas 有一个DataFrame.to_pickle() 方法)。即使您在阅读时将其保存在 .csv 中没有引号,您也不会得到一个 numpy 数组 谢谢,我今天已经失去了足够多的头发!问题是我需要一种允许我在旅途中附加数据的格式。据我所知,pickle 不允许扩展文档。还是我错了? 【参考方案1】:

我怀疑由于您的输出包含逗号,它可能会输入引号以避免与格式冲突。您可以尝试将分隔符更改为制表符,这样就不会发生这种冲突。如果分隔符不适合您,您也可以更改“引用”。

查看此链接了解更多信息:Pandas: use to_csv() with quotation marks and a comma as a seperator

【讨论】:

谢谢艾伦,但我把昏迷放在那里是错误的。我更正了它的描述。如果我使用您的链接的建议,甚至不会保存 csv =/【参考方案2】:

如果您也有同样的问题,也许可以通过签入here 来省去一些麻烦。

那里发布的解决方案都不能解决我的问题,所以这里是解析字符串并将其转换为我需要的格式的代码:

   df = pd.read_csv(filepath_or_buffer = path_x,
                       header = None, 
                       names = ["i", "clauses"]) 

    #it is sad that I have to do that!
    df["clauses"] = df["clauses"].apply(lambda x: x.replace("[", ""))
    df["clauses"] = df["clauses"].apply(lambda x: x.replace("]", ""))
    df["clauses"] = df["clauses"].apply(lambda x: x.replace("\n", ""))
    df["clauses"] = df["clauses"].apply(lambda x: x.replace(",", ""))
    df["clauses"] = df["clauses"].apply(lambda x: x.split(" "))
    df["clauses"] = df["clauses"].apply(lambda x: np.array([int(i) for i in x]))

    cols = [x for x in range(120060)]
    df_x = pd.DataFrame(columns = cols)

    for i in range(len(df)):   
        df_x = df_x.append(pd.Series(data = k: df["clauses"][i][k] for k in cols),
                           ignore_index = True)

    df = pd.read_csv(filepath_or_buffer = path_y,
                       header = None, 
                       names = ["i", "label"]) 

    df_x.astype("int")

【讨论】:

以上是关于to_CSV 将 np.array 保存为字符串而不是列表的主要内容,如果未能解决你的问题,请参考以下文章

如何将 numpy ndarray 保存为 .csv 文件?

如何使用 colab 在谷歌驱动器上保存 np.array?

python小工具

pandas使用read_csv读取数据使用skiprows参数跳过指定的数据行但保留表头pandas使用to_csv函数将dataframe保存为gzip压缩文件

Pandas.to_csv() 十进制参数

判断np.array里面为空字符串的方法