当前位置: 首页 > 知识库问答 >
问题:

防止尾随零熊猫"to_csv"

隆礼骞
2023-03-14

我试图将CSV字符串导出到D3 Web应用程序,但是命令to_csv坚持向数据添加尾随0,这阻止了D3的正确使用。

这里有一个简单的例子来说明这个问题。

我的(简化)数据帧是:

>>> df = pd.DataFrame([['Alex',20.0000, 50.650]],columns=['Name','Age', 'Weight'])
   Name   Age  Weight
0  Alex  20.0   50.65

df['年龄']包含一个浮点数,如下所示:

>>> df['Age']
0    20.0
Name: Age, dtype: float64

然后根据这个答案,我运行。aType(object)要获取我想要的格式,请执行以下操作:

>>> df=df.astype(object)
   Name Age Weight
0  Alex  20  50.65

现在,df['Age']包含一个对象,没有尾随零:

>>> df['Age']
0    20
Name: Age, dtype: object

这就是我想用导出到_csv的内容,但此命令将尾随的0重新添加到数字,我希望避免:

>>> df_csv = df.to_csv(sep=',', index = False)
>>> df_csv
'Name,Age,Weight\nAlex,20.0,50.65\n'

我尝试使用df\u csv=df。根据这个答案,将其转换为_csv(sep=',,index=False,float_format='%.0f'),但这不起作用,因为我的数据帧中还有其他浮点数,我希望保留非零小数。

如何防止没有小数的数字出现尾随的0?


共有3个答案

靳睿
2023-03-14

这里有一种方法,只要字符串列中没有空格,就可以使用。

astype(object)之后使用to_string(),而不是to_csv()。这将保留数字格式,但将使用空格作为分隔符。只要其他字段中没有空格,就可以使用正则表达式将空格转换为逗号。

import re
df = df.astype(object)
df_string = re.sub(" +", ",", df.to_string(index=False))
print(df_string)
#Name,Age,Weight
#Alex,20,50.65

现在将df_string写入您的文件:

with open('path/to/some/file.csv', 'w') as f:
    f.write(df_string)
陈铭晨
2023-03-14

您是否尝试过df['Age']=df['Age']。aType(int)

这让我抓狂

    Name    Age     Weight
0   Alex    20  50.65

将列转换为类型对象实质上允许列保存浮点数、整数、字符串等,而类型化列仅保存该类型。

并将其转换为csv:

df_csv = df.to_csv(sep=',', index = False)
    
'Name,Age,Weight\r\nAlex,20,50.65\r\n'
严修诚
2023-03-14

另一种使用熊猫替换的方式:

df = df.astype(str)
df = df.replace(to_replace = "\.0+$",value = "", regex = True)

这样您就不需要导入任何额外的模块。

 类似资料:
  • 问题内容: 我在csv文件中有这样的数据 我可以像这样阅读和分组 我懂了 我希望这个(顺序无所谓) 我想知道是否有可能算零次 问题答案: 你可以用与: 如果您需要使用输出:

  • 问题内容: 我正在尝试计算阶乘产生的数字的尾随零(这意味着数字变得很大)。以下代码采用一个数字,计算该数字的阶乘,并计算尾随零。但是,当数字大约为25!时,numZeros将不起作用。 我并不担心这段代码的效率,并且我知道有多种方法可以使这段代码的效率更好。我要弄清楚的是为什么计数大于25的数字结尾的零!不管用。 有任何想法吗? 问题答案: 您的任务不是计算阶乘,而是计算零的数量。一个好的解决方案

  • 问题内容: 我有字符串(来自DB),其中可能包含数字值。如果它包含数值,我想删除尾随零,例如: ,仅适用于第一个,而不适用于第二个。 很多答案都指向使用,但是我得到的可能不是数字。因此,我认为更好的解决方案可能是通过Regex。 问题答案: 有可能: 我懒又傻,只是 使用相同的解决方案,而不是某些注释中提到的,以便于理解

  • 问题内容: 我需要找到一种方法来在python中转换以下字符串: 等等。我尝试了.rstrip(‘0’)。rstrip(’。’),但是如果输入为0或00则不起作用。 有任何想法吗?谢谢! 问题答案: 更新了 通用以保持精度并处理看不见的值: 输出:

  • 问题内容: 我正在尝试使用round函数,并且不显示任何尾随零,但最后仍显示一些零。我想得到10.4,但得到这样的东西: 这是我的SQL: 如何在此处删除尾随零?我只需要显示10.4。 问题答案: 您只需要将其强制转换为十进制(12,2)。

  • 当我提交给leetcode时,它运行案例500/502,但失败了,原因是:1808548329。但当我在自己的mac上运行它时,它给出了与公认的答案相同的答案。 我的代码: 交流答案是: 它们在我的mac上运行相同的结果: 第一个解决方案之所以不被接受,是因为时间复杂度 (因为我在自己的mac上运行它,但它给出了与ac相同的答案) 如何计算第一个解决方案的时间复杂度, 它是O(NlogN)吗?我不