您可以在导入字符串时使用 Pandas converters 调用 int 或其他一些自定义转换器函数:
import pandas as pd
from StringIO import StringIO
txt='''\
line,Big_Num,text
1,1234567890123456789012345678901234567890,"That sure is a big number"
2,9999999999999999999999999999999999999999,"That is an even BIGGER number"
3,1,"Tiny"
4,-9999999999999999999999999999999999999999,"Really negative"
'''
df=pd.read_csv(StringIO(txt), converters={'Big_Num':int})
print df
打印:
line Big_Num text
0 1 1234567890123456789012345678901234567890 That sure is a big number
1 2 9999999999999999999999999999999999999999 That is an even BIGGER number
2 3 1 Tiny
3 4 -9999999999999999999999999999999999999999 Really negative
现在测试算术:
n=df["Big_Num"][1]
print n,n+1
打印:
9999999999999999999999999999999999999999 10000000000000000000000000000000000000000
如果您的列中有任何值可能导致int 发牢骚,您可以这样做:
txt='''\
line,Big_Num,text
1,1234567890123456789012345678901234567890,"That sure is a big number"
2,9999999999999999999999999999999999999999,"That is an even BIGGER number"
3,0.000000000000000001,"Tiny"
4,"a string","Use 0 for strings"
'''
def conv(s):
try:
return int(s)
except ValueError:
try:
return float(s)
except ValueError:
return 0
df=pd.read_csv(StringIO(txt), converters={'Big_Num':conv})
print df
打印:
line Big_Num text
0 1 1234567890123456789012345678901234567890 That sure is a big number
1 2 9999999999999999999999999999999999999999 That is an even BIGGER number
2 3 1e-18 Tiny
3 4 0 Use 0 for strings
然后列中的每个值都将是 Python int 或 float 并且将支持算术。