【问题标题】:Pandas unexpected scientific notion熊猫意想不到的科学记数法
【发布时间】:2016-11-19 21:39:32
【问题描述】:

我有一个大的 csv 文件,其中包含一些总线网络信息。

停止码由一个大数字组成,末尾带有某个字母。但是,其中一些只是数字。当我将它们读入熊猫时,大量的数字变成了科学概念。喜欢

code_o  lat_o   lon_o   code_d
490016444HN 51.56878    0.1811568   490013271R
490013271R  51.57493    0.1781319   490009721A
490009721A  51.57708    0.1769355   490010407C
490010407C  51.57947    0.1775409   490011659G
490011659G  51.5806 0.1831088   490009810M
490009810M  51.57947    0.1848733   490014448S
490014448S  51.57751    0.185111    490001243Y
490001243Y  51.57379    0.1839945   490013654S
490013654S  51.57143    0.184776    490013482E
490013482E  51.57107    0.187039    490015118E
490015118E  51.5724 0.1923417   490011214E
490011214E  51.57362    0.1959939   490006980E
490006980E  51.57433    0.1999537   4.90E+09
4.90E+09    51.57071    0.2087701   490003049E
490003049E  51.5631 0.2146196   490004001A
490004001A  51.56314    0.2165552   490015350F

它们的类型是对象,但是我需要它们是普通数字才能交叉连接其他表。

由于该列不是“int”或“float”,因此我无法将它们修改为一整列。

有什么建议吗?

我从 Dropbox 附加了文件

https://www.dropbox.com/s/jhbxsncd97rq1z4/gtfs_OD_links_L.csv?dl=0

【问题讨论】:

  • 您真的希望它们是数字,还是希望它们是字符串(就像带字母的那样)?
  • 请从 csv 文件中发布几行,而不是整个文件的链接。我(和许多其他人)不想从 Interwebz 下载未知文件 --- 病毒、恶意软件和其他杂草。
  • 我希望它们成为未来加入的关键。

标签: python string pandas format scientific-notation


【解决方案1】:

IIUC,尝试在导入时为code_d 列强制输入object

import numpy as np
import pandas as pd

df = pd.read_csv('your_original_file.csv', dtype={'code_d': 'object'})

然后您可以解析该列,丢弃最后的字母并将结果转换为整数类型:

df['code_d'] = df['code_d'].str[:-1].astype(np.int)

【讨论】:

  • 不工作。如果我使用 df['code_d'] = df['code_d'].str[:-1].astype(np.int),我会收到错误 ValueError: invalid literal for long() with base 10: '490016444H'这是指第一行。如果我使用 If I use df['code_d'] = df['code_d'].str[:-2].astype(np.int) 我得到 ValueError: invalid literal for long() with base 10: '4.90E+ '。
  • 请在导入pandas DataFrame之前发布相应的行。此外,490016444Hcode_o 列中,而不是code_d
  • 这也是唯一一个结尾有两个字母而不是一个字母的情况。如果没有正确定义事物,就不可能回答您的问题。
  • 我改成了code_o,因为这应该是主键。而且由于我有数千行下面没有放它,这两个字母的大小写似乎不可避免地会再次发生。
  • @ZXie 我也有同样的问题。你有没有找到解决这个问题的方法?
【解决方案2】:

保持简单:df=pd.read_csv('myfile.csv',dtype=str),它将以字符串的形式读取所有内容。或者正如@Alberto 之前发布的那样,仅指定该列:df=pd.read_csv('myfile.csv',dtype={'code_o':str})

【讨论】:

    猜你喜欢
    • 2013-07-18
    • 2016-03-04
    • 2019-11-05
    • 2011-08-23
    • 2020-07-24
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多