Python 熊猫:合并两个数据帧后如何防止科学记数法?

Python 熊猫:合并两个数据帧后如何防止科学记数法?,python,pandas,dataframe,Python,Pandas,Dataframe,我想合并两个数据帧,但是,其中一列包含nan,合并后,用科学记数法记录整型值。实际上,我只想得到它们的原始值。 输入: import pandas as pd import numpy as np left=pd.DataFrame({'key':['one','two','three'],'other':[1,2,3]}) right=pd.DataFrame({'id':[600608457536718400,np.nan,96436390593326400],'key':['one'

我想合并两个数据帧,但是,其中一列包含
nan
,合并后,用科学记数法记录整型值。实际上,我只想得到它们的原始值。 输入:

import pandas as pd 
import numpy as np 
left=pd.DataFrame({'key':['one','two','three'],'other':[1,2,3]})

right=pd.DataFrame({'id':[600608457536718400,np.nan,96436390593326400],'key':['one','two','three']})

total=pd.merge(left,right,on=['key'],how='left')
print(left)
print(right)
print(total)
     key  other
0    one      1
1    two      2
2  three      3
             id    key
0  6.006085e+17    one
1           NaN    two
2  9.643639e+16  three
     key  other            id
0    one      1  6.006085e+17
1    two      2           NaN
2  three      3  9.643639e+16
     key  other            id
0    one      1  600608457536718400
1    two      2           NaN
2  three      3  96436390593326400
right['id'].fillna(-1,inplace=True)
right['id']=right['id'].astype('int64')
total=pd.merge(left,right,on=['key'],how='left')
     key  other                  id
0    one      1  600608457536718336
1    two      2                  -1
2  three      3   96436390593326400
输出:

import pandas as pd 
import numpy as np 
left=pd.DataFrame({'key':['one','two','three'],'other':[1,2,3]})

right=pd.DataFrame({'id':[600608457536718400,np.nan,96436390593326400],'key':['one','two','three']})

total=pd.merge(left,right,on=['key'],how='left')
print(left)
print(right)
print(total)
     key  other
0    one      1
1    two      2
2  three      3
             id    key
0  6.006085e+17    one
1           NaN    two
2  9.643639e+16  three
     key  other            id
0    one      1  6.006085e+17
1    two      2           NaN
2  three      3  9.643639e+16
     key  other            id
0    one      1  600608457536718400
1    two      2           NaN
2  three      3  96436390593326400
right['id'].fillna(-1,inplace=True)
right['id']=right['id'].astype('int64')
total=pd.merge(left,right,on=['key'],how='left')
     key  other                  id
0    one      1  600608457536718336
1    two      2                  -1
2  three      3   96436390593326400
期望值:

import pandas as pd 
import numpy as np 
left=pd.DataFrame({'key':['one','two','three'],'other':[1,2,3]})

right=pd.DataFrame({'id':[600608457536718400,np.nan,96436390593326400],'key':['one','two','three']})

total=pd.merge(left,right,on=['key'],how='left')
print(left)
print(right)
print(total)
     key  other
0    one      1
1    two      2
2  three      3
             id    key
0  6.006085e+17    one
1           NaN    two
2  9.643639e+16  three
     key  other            id
0    one      1  6.006085e+17
1    two      2           NaN
2  three      3  9.643639e+16
     key  other            id
0    one      1  600608457536718400
1    two      2           NaN
2  three      3  96436390593326400
right['id'].fillna(-1,inplace=True)
right['id']=right['id'].astype('int64')
total=pd.merge(left,right,on=['key'],how='left')
     key  other                  id
0    one      1  600608457536718336
1    two      2                  -1
2  three      3   96436390593326400
我尝试填充列
id
,然后转换列的类型,但失败

我的尝试:

import pandas as pd 
import numpy as np 
left=pd.DataFrame({'key':['one','two','three'],'other':[1,2,3]})

right=pd.DataFrame({'id':[600608457536718400,np.nan,96436390593326400],'key':['one','two','three']})

total=pd.merge(left,right,on=['key'],how='left')
print(left)
print(right)
print(total)
     key  other
0    one      1
1    two      2
2  three      3
             id    key
0  6.006085e+17    one
1           NaN    two
2  9.643639e+16  three
     key  other            id
0    one      1  6.006085e+17
1    two      2           NaN
2  three      3  9.643639e+16
     key  other            id
0    one      1  600608457536718400
1    two      2           NaN
2  three      3  96436390593326400
right['id'].fillna(-1,inplace=True)
right['id']=right['id'].astype('int64')
total=pd.merge(left,right,on=['key'],how='left')
     key  other                  id
0    one      1  600608457536718336
1    two      2                  -1
2  three      3   96436390593326400
输出:

import pandas as pd 
import numpy as np 
left=pd.DataFrame({'key':['one','two','three'],'other':[1,2,3]})

right=pd.DataFrame({'id':[600608457536718400,np.nan,96436390593326400],'key':['one','two','three']})

total=pd.merge(left,right,on=['key'],how='left')
print(left)
print(right)
print(total)
     key  other
0    one      1
1    two      2
2  three      3
             id    key
0  6.006085e+17    one
1           NaN    two
2  9.643639e+16  three
     key  other            id
0    one      1  6.006085e+17
1    two      2           NaN
2  three      3  9.643639e+16
     key  other            id
0    one      1  600608457536718400
1    two      2           NaN
2  three      3  96436390593326400
right['id'].fillna(-1,inplace=True)
right['id']=right['id'].astype('int64')
total=pd.merge(left,right,on=['key'],how='left')
     key  other                  id
0    one      1  600608457536718336
1    two      2                  -1
2  three      3   96436390593326400

希望能得到帮助!谢谢

你能试试用这个吗?也许它会起作用。基本上,在创建dataframe时,我将类型更改为str

import pandas as pd 
import numpy as np 
left=pd.DataFrame({'key':['one','two','three'],'other':[1,2,3]})

right=pd.DataFrame({'id':[str(600608457536718400),np.nan,str(96436390593326400)],'key':['one','two','three']})

total=pd.merge(left,right,on=['key'],how='left')
print(total)
这将产生以下输出

     key  other                  id
0    one      1  600608457536718400
1    two      2                 NaN
2  three      3   96436390593326400
请参阅: