Pandas(Python)阅读和使用Java BigInteger/大数

Pandas(Python)阅读和使用Java BigInteger/大数,python,numpy,pandas,biginteger,Python,Numpy,Pandas,Biginteger,我有一个带有散列值的数据文件(csv)。其中一些可能长达80个字符。我希望在Python中阅读它们,以便执行数据分析任务。有没有一种方法可以在不丢失信息的情况下导入python中的数据 编辑:我已经尝试了评论中建议的实现,但这对我不起作用。 csv文件中的示例数据是:772417562214417620288814020928171250177244473032121399816802171613168152184106从一个简单的文本文件开始读取,只有一个变量和一行 %more foo.txt

我有一个带有散列值的数据文件(csv)。其中一些可能长达80个字符。我希望在Python中阅读它们,以便执行数据分析任务。有没有一种方法可以在不丢失信息的情况下导入python中的数据

编辑:我已经尝试了评论中建议的实现,但这对我不起作用。
csv文件中的示例数据是:
772417562214417620288814020928171250177244473032121399816802171613168152184106
从一个简单的文本文件开始读取,只有一个变量和一行

%more foo.txt
x
77241756221441762028881402092817125017724447303212139981668021711613168152184106

In [268]: df=pd.read_csv('foo.txt')
Pandas将以字符串形式读取它,因为它太大,无法存储为核心编号类型,如int64或float64。但是信息在那里,你没有丢失任何东西

In [269]: df.x
Out[269]: 
0    7724175622144176202888140209281712501772444730...
Name: x, dtype: object

In [270]: type(df.x[0])
Out[270]: str
您可以使用普通python将其视为一个数字。回想一下评论中链接中的注意事项,这不会像numpy和pandas中的东西那样快,因为在numpy和pandas中,您将整个列存储为int64。这是使用更灵活但速度较慢的对象模式来处理问题

您可以将列更改为存储为long(长整数),如下所示。(但请注意,dtype仍然是object,因为除了核心numpy类型(int32、int64、float64等)以外的所有类型都存储为object。)

然后可以或多或少地把它当作一个数字

In [272]: df.x * 2
Out[272]: 
0    1544835124428835240577628041856342500354488946...
Name: x, dtype: object
你必须做一些格式化才能看到整数。或者选择numpy路径,默认显示整数

In [273]: df.x.values * 2
Out[273]: array([ 154483512442883524057762804185634250035448894606424279963336043423226336304368212L], dtype=object)

正如@JohnE在他的回答中所解释的,我们在使用熊猫阅读大数字时不会丢失任何信息。它们存储为
dtype=object
,要对它们进行数值计算,我们需要将这些数据转换为数值类型

对于系列:

我们必须将
映射(func)
应用于数据帧中的序列:

df['columnName'].map(int)
 df.applymap(int)
整个数据帧:

如果出于某种原因,我们的整个数据帧由
dtype=object
的列组成,我们将查看
applymap(func)

从熊猫的文献中:

DataFrame.applymap(func):将一个函数应用于一个数据帧,该数据帧旨在进行元素操作,例如,为数据帧中的每个系列执行映射(func,series)

因此,要转换dataframe中的所有列:

df['columnName'].map(int)
 df.applymap(int)

这可能会有帮助:或者这一条:@JohnE谢谢你指出其他方法,但不幸的是,这对我不起作用。我更新了我的问题来描述我目前的问题。是的,没错。我看到你试图把它作为一个编辑来做(在我看来这很好,尽管它被拒绝了)。谢谢你的澄清,很高兴你解决了它。@JohnE我不想要一个单独的答案,因为我的答案是建立在你的基础上的。在我看来,添加新答案似乎不符合逻辑,不过,感谢您解释解决方案的方法!