我用read_csv()加载了一个看起来像这样的数据集
userid
NaN
1.091178e+11
1.137856e+11
假设我不想使用keep_default_na = False.有什么办法可以将用户ID列转换为str.
我尝试了df.userid.astype(str)并得到了1.091178e 11.我期待扩展形式而不是科学形式的结果.
我该怎么办?
解决方法:
您可以使用map或按照提及的comment进行申请:
print (df.userid.map(lambda x: '{:.0f}'.format(x)))
0 nan
1 109117800000
2 113785600000
Name: userid, dtype: object
df.userid = df.userid.map(lambda x: '{:.0f}'.format(x))
print (df)
userid
0 nan
1 109117800000
2 113785600000
如果地图速度更快,我很有趣,但是它是相同的:
#[300000 rows x 1 columns]
df = pd.concat([df]*100000).reset_index(drop=True)
#print (df)
In [40]: %timeit (df.userid.map(lambda x: '{:.0f}'.format(x)))
1 loop, best of 3: 211 ms per loop
In [41]: %timeit (df.userid.apply(lambda x: '{:.0f}'.format(x)))
1 loop, best of 3: 210 ms per loop
另一个解决方案是to_string,但是它很慢:
print(df.userid.to_string(float_format='{:.0f}'.format))
0 nan
1 109117800000
2 113785600000
In [41]: (df.userid.to_string(float_format='{:.0f}'.format))
1 loop, best of 3: 2.52 s per loop
标签:pandas,python
来源: https://codeday.me/bug/20191112/2023505.html