如何防止pandas.read\u gbq推断列的数据类型 我正在使用pandas.read\u gbq从google bigquery读取一个表。我面临的问题是pandas自动推断每一列的数据类型,这就产生了问题 例如,在表中,我有一个列名纵横比,并自动将所有值转换为我想要阻止的浮点值 我需要这里没有浮点数的精确表示我需要源列的字符串表示。 我尝试了以下解决方案,但它不起作用 我已经检查了熊猫。请阅读_gbq,但在这种情况下找不到任何有帮助的东西 我还想知道我可以在python中使用的任何其他选项,而不仅仅限于pandas

如何防止pandas.read\u gbq推断列的数据类型 我正在使用pandas.read\u gbq从google bigquery读取一个表。我面临的问题是pandas自动推断每一列的数据类型,这就产生了问题 例如,在表中,我有一个列名纵横比,并自动将所有值转换为我想要阻止的浮点值 我需要这里没有浮点数的精确表示我需要源列的字符串表示。 我尝试了以下解决方案,但它不起作用 我已经检查了熊猫。请阅读_gbq,但在这种情况下找不到任何有帮助的东西 我还想知道我可以在python中使用的任何其他选项,而不仅仅限于pandas,python,pandas,google-bigquery,Python,Pandas,Google Bigquery,是BigQuery表字符串中的原始值吗?熊猫GBQ会进行这种转换,这似乎令人惊讶 如果这些值最初是字符串,您可以尝试使用官方名称,这可能会产生不同的结果 如果这只是一个显示问题,您可以使用自定义格式设置程序: def format(f): if f % 1 == 0: return repr(int(f)) return repr(f) # should be able to set this locally as well. pd.options.display

是BigQuery表字符串中的原始值吗?熊猫GBQ会进行这种转换,这似乎令人惊讶

如果这些值最初是字符串,您可以尝试使用官方名称,这可能会产生不同的结果

如果这只是一个显示问题,您可以使用自定义格式设置程序:

def format(f):
    if f % 1 == 0:
        return repr(int(f))
    return repr(f)
# should be able to set this locally as well.
pd.options.display.float_format = format 
pd.DataFrame([[.5], [-5.0], [22.5]], columns=['a'])
收益率:

     a
0  0.5
1   -5
2 22.5

@Ben.T我已经更新了这个问题,希望现在问题更清楚了,你会明白为什么astype('Int')或astype('str')这样的解决方案不起作用。看了文档后,你似乎没有什么具体的办法可以解决
read\u gbq
。我的建议是将其转换为字符串,然后在
s[-2:]='.0'
@rtenha的情况下执行另一个转换来修剪字符串,因为case
22.5
。哪个应该是
22.5
而不是
22.0
。你是什么意思?仅当字符串的最后2个字符为
.0
时,它才会修改该字符串,对于
22.5
def format(f):
    if f % 1 == 0:
        return repr(int(f))
    return repr(f)
# should be able to set this locally as well.
pd.options.display.float_format = format 
pd.DataFrame([[.5], [-5.0], [22.5]], columns=['a'])
     a
0  0.5
1   -5
2 22.5