我使用pandas读取.csv文件,然后将其另存为.xls文件。代码如下:
import pandas as pd
df = pd.read_csv('filename.csv', encoding='GB18030')
print(df)
df.to_excel('filename.xls')
有一列包含类似“2020/7/12”的日期,看起来熊猫将其识别为日期,并自动将其输出到“2020-07-12”。我不想格式化此列或任何其他类似列,我希望所有数据保持与纯文本相同
此转换发生在read_csv()
,因为print(df)
已经在to_excel()
之前输出YYYY-MM-DD
我尝试使用df.info()
检查该列的数据类型,数据类型是object。然后我将参数dtype=pd.StringDtype()
添加到read_csv()
中,它没有任何帮助
该文件包含汉字,所以我将编码设置为GB18030,不知道这是否重要
问题解决了。我仔细检查了我的
.csv
文件,用记事本打开了它,数据是2020-07-12
,在Office上显示为2020/7/12
。结果表明,Office将日期重新格式化为yyyy/m/d
(基于您所在的地区)。我正在为我的公司开发一个处理数据并将数据导入DB的工具,我们通过复制和粘贴手动完成这些工作,所以没有人注意到这个问题。感谢@Valdi_Bo的调查和耐心我关于pd.read\u csv的经验表明:
如果希望read\u csv将此类列转换为datetime类型,您可以 应传递parse_dates参数,指定要删除的列的列表 解析为日期。因为您没有这样做,所以不应该删除任何源列 已转换为日期时间类型
要检查此详细信息,请在阅读文件后,运行
file.info()
并进行检查 相关列的类型因此,如果相应的Excel文件列为Date类型,则可能 此转换是由转换为\u excel引起的
还有一条关于变量名的注释: 使用read\u csv读取的是一个数据帧,而不是文件。 实际文件是从中读取内容的源对象, 但这里您只传递了文件名
因此,不要使用像file这样的名称来命名结果数据帧,如下所示 这是误导。最好使用例如df
从05:58Z开始编辑以下注释
为了全面检查您在评论中所写的内容,我创建了 以下CSV文件:
我运行:
df = pd.read_csv('Input.csv')
然后print(df)
,得到:因此,在Pandas级别上,datebouth 柱其余两列都包含数字内容,因此 无声地转换为int64和float64,但datebuy仍然是对象
然后我将这个df保存到一个Excel文件中,运行:
df.to_excel('Output.xls')
并用Excel打开了它。内容是:因此,在Excel级别都没有进行任何数据类型转换
要查看B2单元格的实际数据类型(第一个datebouth), 我单击此单元格并按Ctrl-1以显示单元格格式。 格式是常规(不是日期),正如我所预料的那样
也许你有一些过时的软件版本? 我使用Pythonv。3.8.2和熊猫v。1.0.3.
另一个需要检查的细节:在pd.read\u csv之后查看代码。 也许你把指令放在某个地方,比如df.datebunded=pd.to_datetime(df.datebunded)(显式类型转换)? 或者至少是格式转换。请注意,在我的环境中 datebunded列的格式绝对没有变化
相关问题 更多 >
编程相关推荐