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

引用str的;熊猫身上的浮子

王嘉木
2023-03-14

处理后的文件不干净。csv

Date,Wave,Wavelength
2019-08-28,Theta,0.112358472
2019-08-27,Eta,571.5499015
2019-08-27,Lambda,286.4175921
2019-08-26,Iota,0.220237736

有了密码

import os
import csv
import pandas as pd

myfile = ('path/to/'
          'unclean.csv')

os.chdir(os.path.dirname(myfile))
df = pd.read_csv(os.path.basename(myfile))

df['Date'] = pd.to_datetime(df['Date'])
df[['Wave']] = df[['Wave']].astype(str)
df[['Wavelength']] = df[['Wavelength']].astype(float)

df.to_csv('clean.csv',
          float_format='%g',
          index=False,
          quotechar='"',
          quoting=csv.QUOTE_NONNUMERIC)

我把输出弄干净了。csv

"Date","Wave","Wavelength"
"2019-08-28","Theta","0.112358"
"2019-08-27","Eta","571.55"
"2019-08-27","Lambda","286.418"
"2019-08-26","Iota","0.220238"

在引用所有内容的地方,尽管我特别将列的类型设置为波长浮动,并将其作为参数设置为至_csv,但我要求仅引用非数字字段。

如何引用字符串并保持数字不被引用?

许多讨论(例如:1、2、3、4)建议quoting=csv。QUOTE_NONNUMERIC应该可以。

使用pandas==0.24。2unicodesv==0.14。1,均来自蟒蛇项目==0.8。2

议论

瓦伦蒂诺的回答指出了问题所在,但我知道除了float\u格式=“%g”

"Date","Wave","Wavelength"
"2019-08-28","Theta",0.11235847199999999
"2019-08-27","Eta",571.5499014999999
"2019-08-27","Lambda",286.41759210000004
"2019-08-26","Iota",0.22023773600000002

避免引入少量的9999990000001

共有1个答案

汤昊
2023-03-14

从熊猫到_csv文档:

引用:csv模块中的可选常量
默认为csv。最低报价。如果设置了浮点格式,则浮点将转换为字符串,从而转换为csv。QUOTE\u NONUMERIC将它们视为非数字。

(重点是我的)

只需删除float\u format='%g'参数,您的float将不会被引用。

编辑

据我所知,如果您需要格式化浮动,则无法直接使用to_csv参数实现您想要的效果<但是你仍然可以自己“伪造”格式。

#make a new dataframe with formatted strings
ddf = df.applymap(lambda x : '{:g}'.format(x) if isinstance(x, float) else '"{}"'.format(x))

#write the new dataframe to csv, now using QUOTE_NOTE because we already added quote characters where needed
ddf.to_csv('clean.csv',
      index=False,
      quoting=csv.QUOTE_NONE)

clean.csv文件看起来像:

Date,Wave,Wavelength
"2019-08-28 00:00:00","Theta",0.112358
"2019-08-27 00:00:00","Eta",571.55
"2019-08-27 00:00:00","Lambda",286.418
"2019-08-26 00:00:00","Iota",0.220238
 类似资料:
  • 我正在从pandas输出一个csv文件,其中包含一些用于latex报告的调查文本。一些响应在其响应中带有逗号,因此熊猫将数据输出为 通过将字段用双引号括起来,显然可以处理字段中的逗号。 我希望上面看起来像这样: 通过将所述字段包装在{}中,因为这是latex包可以理解的分隔符。 有没有办法告诉熊猫。要做这个吗? 我已经尝试了以下方法 当然,当我需要“}”时,它会用“{”关闭文本包装 更新当我使用p

  • 问题内容: 既然OpenShift Online V2已经宣布终止服务,我希望将我的Python应用程序迁移到OpenShift Online V3(又名OpenShift NextGen)。熊猫是必需项(列于中) 在v2中安装pandas已经很简单了,但是V3不允许在构建过程中进行手动交互(或者是吗?)。 当我尝试构建我的应用程序时,构建过程将在一个小时后停止。已下载并安装的内容,并且正在为所选

  • 问题内容: 因此,我了解到可以使用DataFrame.groupby而不用使用MultiIndex进行子采样/横截面。 另一方面,当我在DataFrame上具有MultiIndex时,仍然需要使用DataFrame.groupby进行子采样/横截面。 那么,除了在打印时非常有用和漂亮地显示层次结构之外,MultiIndex有什么好处? 问题答案: 在pandas 0.4版本中引入了分级索引(也称为

  • 问题内容: Numpy似乎在和类型之间进行了区分。例如我可以做:: 其中dtype(’S’)和dtype(’O’)分别对应于和。 但是熊猫似乎就缺少了区分,并要挟到。:: 强制类型也无济于事。:: 此行为有任何解释吗? 问题答案: Numpy的字符串dtypes不是python字符串。 因此,故意使用本机python字符串,这需要对象dtype。 首先,让我演示一下numpy的字符串与众不同的含义

  • 问题内容: 我正在尝试过滤出包含产品列表的数据框。但是,我遇到了熊猫-每当我运行代码时,“ dataframe”对象都没有属性“ str”错误。 这是代码行: 如果有人有任何建议的想法,请告诉我。我已经搜索了很多次,而且非常困惑。 产品是对象数据类型。 编辑: 这是头: 编辑2:这是print(data),A是产品。当我将其打印出来时,看起来好像A不在类别产品下。 问题答案: 答案很简单: 改变成

  • 问题内容: 我有一个DataFrame,说一个波动率表面,索引为时间,列为行权。如何进行二维插值?我可以,但是我该如何处理?我知道我们可以,但是甚至不是线性插值。有没有办法插入我们自己的方法进行插值? 问题答案: 您可以用来获取线性插值。 对于更复杂的事情,您需要推出自己的函数来处理一个对象并根据需要填充值并返回另一个对象。