【问题标题】:Pandas exported CSV file not enclosing text/string in double quotesPandas 导出的 CSV 文件未将文本/字符串括在双引号中
【发布时间】:2021-05-01 06:23:52
【问题描述】:

我有一个 python 脚本,它从 MongoDB 数据库中获取 JSON 文件,执行 ETL 过程,例如过滤、展平字典,最后将数据帧导出为 CSV(工作正常)。

我遇到的问题是当我在记事本中打开 CSV 时,文本列没有用引号引起来。

如果我错了,请纠正我,但我相信当列的数据类型被指定为字符串/文本时,当您在 Excel 中打开该文件时没有引号但在记事本中打开时应该显示那些字符串列在引号内。

from pymongo import MongoClient
import pandas as pd
from azure.storage.filedatalake import DataLakeServiceClient
from azure.core._match_conditions import MatchConditions
from azure.storage.filedatalake._models import ContentSettings
from pandas import json_normalize
from datetime import datetime, timedelta
import numpy as np
import json

mongo_client = MongoClient("XXXX")
db = mongo_client.rfqdb 
table = db.request
document = table.find({'createdAt': {'$gt': datetime.utcnow() - timedelta(days=7)}}) 
docs = list(document)
docs = json.dumps(docs,default=str)
docs = docs.replace(r"\n",'').replace(r"\r\n",'').replace(r"\r",'')
docs = json.loads(docs)
docs = json_normalize(docs)
docs = docs[["id","reportName"]].astype("string")
print(docs.dtypes)
id                          string
reportName                  string

当我在 Notepad++ 中打开从 Pandas 导出的 CSV 文件时,它不会在引号内显示​​字符串:

任何人都可以对这种情况有所了解,因为我在 Azure 数据工厂中完成了同样的过程,我将这两列映射为字符串,当我在记事本中打开 CSV 时,它会显示包含在引号内的字符串(见下文),所以我有点困惑为什么 Python Pandas 在导出时没有显示这个。

提前致谢

【问题讨论】:

    标签: python pandas csv export-to-csv


    【解决方案1】:

    正如这里的回答,它是关于如何格式化 CSV。 Unnecessary double quotes added to rows of CVS file when opening with notepad/notepad++

    所以,如果你想去掉双引号,我建议试试这个:

    csv.writer(csvfile, quoting=csv.QUOTE_NONE)
    

    【讨论】:

    • 我的问题不是为什么我得到不必要的双引号,而是为什么我的字符串/文本列周围没有双引号,例如从 Azure 数据工厂导出时列的屏幕截图。当它是字符串/文本时,这就是它应该被格式化的方式
    • 对不起,只需将csv.QUOTE_NONE 更改为csv.QUOTE_ALL 它的指示编写器对象引用所有字段。python-csv-quote-allQUOTE_NONNUMERIC 中所述,可以使用, 如果您不想将数字数据用双引号引起来。
    • 我认为 QUOTE_NONNUMERIC 效果更好,但问题是它甚至引用了我不需要的列标题
    • 你有没有试过先用字段名写标题,然后你可以输入.json数据到writerowfieldnames = ['id', 'reportName']writer = csv.writer(csvfile, quoting=csv.QUOTE_NONNUMERIC )writer.writeheader()
    • python-csv.DictWriter 查看简短的用法示例。
    猜你喜欢
    • 2021-05-11
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 2017-11-10
    • 2014-09-26
    • 2021-06-02
    • 2014-11-28
    • 1970-01-01
    相关资源
    最近更新 更多