如何使用 pandas 和 python 更改给定数据框中列的类型

how to change the type of the columns in a given dataframe using pandas and python

如何在 Streamlit 中创建一个函数来更改数据框中列的数据类型,其中用户 select 他想要将 selected 列转换为它的类型?

我创建了一个将数据框作为参数的函数,然后在下拉列表中显示用户可以从中选择的类型。

问题是,当用户 select 新类型和系统打印 df.info() selected 列仍然是旧类型时。

代码:

import pandas as pd
import streamlit as st

def transform(df):
    types = {'-':None
           ,'Boolean': '?'
           ,'Byte': 'b'
           ,'Integer':'i'
           ,'Floating point': 'f' 
           ,'Date Time': 'M'
           ,'Time': 'm'
           ,'Unicode String':'U'
           ,'Object': 'O'}
    new_types = {}
    expander_types = st.beta_expander('Convert Data Types')
    for i, col in enumerate(df.columns):
        txt = 'Convert {} from {} to:'.format(col, df[col].dtypes)
        expander_types.markdown(txt, unsafe_allow_html=True)
        new_types[i] = expander_types.selectbox('Field to be converted:',[*types],index=0,key=i)
    st.text(" \n") #break line
    btn1 = st.button('Get CSV')
    if btn1:
        download_file(df, types, new_types, "csv")
        print("transform",df.info())
    

我的函数哪里出错了??

Pandas 可以将现有列中的数据转换为不同的数据类型。对于大多数字符串、整数、浮点数或布尔数据,请将 pd.convert_dtypes and for datetime use pd.to_datetime. If you need a custom output that isn't converting datatypes (like time instead of datetime), you can use df.apply 与以原始形式输入数据并以所需形式输出数据的函数一起使用。