- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 recurring problem将 Python 中的大量数据保存到 csv 中。这些数字是毫秒纪元时间戳,我无法转换或截断,必须以这种格式保存。由于带有毫秒时间戳的列也包含一些 NaN 值,pandas 会自动将它们转换为 float (请参阅“支持整数 NA”下的陷阱中的 the documentation。
我似乎无法避免这种行为,所以我的问题是,在使用 df.to_csv 时如何将这些数字保存为整数值,即没有小数点或尾随零?我在同一数据框中有不同 float 精度数字的列,我不想丢失那里的信息。在 to_csv 中使用 float_format
参数似乎对我的数据框中的所有浮点列应用相同的格式。
一个例子:
>>> df = pd.DataFrame({'a':[1.25, 2.54], 'b':[1424380449437, 1425510731187]})
>>> df['b'].dtype
Out[1]: dtype('int64')
>>> df.loc[2] = np.NaN
>>> df
Out[1]:
a b
0 1.25 1.424380e+12
1 2.54 1.425511e+12
2 NaN NaN
>>> df['b'].dtype
dtype('float64')
>>> df.to_csv('test.csv')
>>> with open ('test.csv') as f:
... for line in f:
... print(line)
,a,b
0,1.25,1.42438044944e+12
1,2.54,1.42551073119e+12
2,,
如您所见,我丢失了纪元时间戳最后两位数字的精度。
最佳答案
同时pd.to_csv
没有参数来更改各个列的格式,pd.to_string
做。这有点麻烦,对于非常大的 DataFrame 可能会出现问题,但您可以使用它来生成格式正确的字符串,然后将该字符串写入文件(如 answer 中针对类似问题的建议)。 to_string
的 formatters
参数采用函数字典来格式化各个列。在您的情况下,您可以为 "b"
列编写自己的自定义格式化程序,而保留其他列的默认值。这个格式化程序可能看起来有点像这样:
def printInt(b):
if pd.isnull(b):
return "NaN"
else:
return "{:d}".format(int(b))
现在您可以使用它来生成字符串:
df.to_string(formatters={"b": printInt}, na_rep="NaN")
给出:
' a b\n0 1.25 1424380449437\n1 2.54 1425510731187\n2 NaN NaN'
您可以看到仍然存在问题,即这不是逗号分隔的,并且 to_string
实际上没有参数来设置自定义分隔符,但这可以通过正则表达式轻松修复:
import re
re.sub("[ \t]+(NaN)?", ",",
df.to_string(formatters={"b": printInt}, na_rep="NaN"))
给出:
',a,b\n0,1.25,1424380449437\n1,2.54,1425510731187\n2,,'
现在可以将其写入文件中:
with open("/tmp/test.csv", "w") as f:
print(re.sub("[ \t]+(NaN)?", ",",
df.to_string(formatters={"b": printInt}, na_rep="NaN")),
file=f)
这会产生你想要的结果:
,a,b
0,1.25,1424380449437
1,2.54,1425510731187
2,,
<小时/>
如果您想在 csv 文件中保留 NaN
,只需更改正则表达式即可:
with open("/tmp/test.csv", "w") as f:
print(re.sub("[ \t]+", ",",
df.to_string(formatters={"b": printInt}, na_rep="NaN")),
file=f)
将给出:
,a,b
0,1.25,1424380449437
1,2.54,1425510731187
2,NaN,NaN
<小时/>
如果您的 DataFrame 之前包含带有空格的字符串,则稳健的解决方案并不那么容易。您可以在每个值前面插入另一个字符,该字符指示下一个条目的开始。例如,如果所有字符串中只有单个空格,则可以使用另一个空格。这会将代码更改为:
import pandas as pd
import numpy as np
import re
df = pd.DataFrame({'a a':[1.25, 2.54], 'b':[1424380449437, 1425510731187]})
df.loc[2] = np.NaN
def printInt(b):
if pd.isnull(b):
return " NaN"
else:
return " {:d}".format(int(b))
def printFloat(a):
if pd.isnull(a):
return " NaN"
else:
return " {}".format(a)
with open("/tmp/test.csv", "w") as f:
print(re.sub("[ \t][ \t]+", ",",
df.to_string(formatters={"a": printFloat, "b": printInt},
na_rep="NaN", col_space=2)),
file=f)
这会给出:
,a a,b
0,1.25,1424380449437
1,2.54,1425510731187
2,NaN,NaN
关于Python pandas 带 to_csv 的大 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46236711/
我需要一个由 , 分割数据的单行 CSV。我的问题是,当我尝试使用 apply 遍历我的 Dataframe 时,我得到一个 Series 对象并且 to_csv 方法给我一个 str 分成行,将 N
尝试使用 pandas 将数据帧写入 csv 并删除连接值产生的引号。解释器不接受参数引用。 错误 TypeError: to_csv() got an unexpected keyword argu
我正在使用 to_csv() 方法将数据框写入 .csv 文件。我有一个名为 emotion 的变量,它引用一个数据框,我正在使用 to_csv() 像这样; emotion.to_csv(file
我有这个代码 import numpy as np import pandas as pd import csv odata = pd.read_csv('email.csv') data = oda
我有一个具有以下结构的数据框,为了解决这个问题,我对其进行了简化,我正在从 csv 文件中读取数据框。 A B C D E LOCATION DATE DAT
我用 pd.read_csv 读取 CSV 文件, 如图所示: lisp = pd.read_csv('ida_lisp.ida', header=None, skip_blank_lines=Fal
我试图从 tripadvisor 抓取数据,但是从我尝试抓取的几个页面中,当我尝试将其导出到 csv 时,它只显示 1 行数据并给出这样的错误消息 AttributeError: 'NoneType'
我有数据框 df = [["A1" "B2" "C3"] ["D4" "E5" "F6"]] (所有文本均为字符串)我想使用 df.to_csv() 将其保存到一个文件中,文本“E5”为彩色/粗体。可
出于某种原因,我需要以这种格式输出到 csv 并在每列名称周围加上引号,我想要的输出如下所示: "date" "ret" 2018-09-24 0.00013123989025119056 我正在尝试
如何将文件写入文件名未编码的文件系统? 目前,写入 /myfolder/my file.csv 变为 /myfolder/my%20file.csv。我希望文件名是my file.csv。 代码片段:
来自具有以下格式的 csv 文件: Date,Data 01-01-01,111 02-02-02,222 03-03-03,333 我使用以下代码计算值的月平均值: data = pd.read_c
我有一个数据集,我试图将其拆分为训练集和测试集。我制作了以下脚本来分割数据,如上所述: import pandas as pd import numpy as np data_path = "/pat
我想使用 DecisionTree 2.2.2 构建决策树。 https://engineering.purdue.edu/kak/distDT/DecisionTree-2.2.2.html 但是,
我正在将 pandas 数据帧写入 csv 文件。但是我可以发现唯一 ID 的数量正在减少,但总行数保持不变 下面您可以找到代码: 检查grouped_test的总计数和唯一计数 grouped_t
我是 python 的新手,到目前为止我很喜欢 ipython notebook 来学习。我是在使用 to_csv() 函数将 Pandas 数据帧写出到文件中吗?我想打开 csv 以查看它在 exc
似乎 pandas.to_csv 函数有两个属性做同样的事情。 也许我遗漏了什么。 来自文档: columns : sequence, optional Columns to write header
我正在使用 jupyter notebook pandas to_csv 不会将数据帧输出到文件。 我尝试使用 to_csv 通过设置工作目录或指定目录将数据帧输出到 csv 文件,但它没有创建任何文
我想使用 Pandas DataFrame 将我的数据写入 csv 文件,我的代码是: >>> for _, dataframe in my_data.items(): datafra
为了降低内存成本,我使用 astype() 指定了我的 pandas 数据框的数据类型,例如: df['A'] = df['A'].astype(int8) 然后我使用 to_csv() 来存储它,但
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我是一名优秀的程序员,十分优秀!