pandas.DataFrame的主()和unstack()实现行转列

  

示例:有如下表需要进行行转列:

  

 pandas.DataFrame的主()和unstack()实现行转列

  

代码如下:

        # - * -编码:utf - 8 - *      熊猫作为pd导入      进口MySQLdb      从进口filterwarnings警告      #由于创建表如果不是总存在会抛出警告,因此使用filterwarnings消除      filterwarnings(“忽略”,类别=MySQLdb.Warning)      从sqlalchemy进口create_engine      导入系统      如果sys.version_info.major<3:      重载(系统)      sys.setdefaultencoding (“utf - 8”)      #此脚本适用于python2和python3      主机、端口、用户密码、数据库字符集=?92.168.1.193”,3306年,“狮子”、“mysql”、“测试”、“utf8 "            def get_df ():      全球主机、端口、用户、密码、数据库字符集      conn_config={“主机”:主机,“港”:港口,“用户”:用户,“passwd”: passwd,“分贝”:db,“字符集”:字符集}      康涅狄格州=MySQLdb.connect (* * conn_config)      result_df=pd。read_sql(“选择用户名,主题,得分从测试”,康涅狄格州)      返回result_df            def枢轴(result_df):      df_pivoted_init=result_df.pivot(“用户名”、“主题”、“分数”)      df_pivoted=df_pivoted_init.reset_index() #将行索引也作为DataFrame值的一部分,以方便存储数据库      返回df_pivoted_init df_pivoted      #返回的两个DataFrame,一个是以姓名作索引的,一个是以数字序列作索引,前者用于透视,后者用于save_to_mysql            def透视(df_pivoted_init):      #透视需要进行df_pivoted_init二维表格的行,列索引遍历,需要拼SQL因此不能使用save_to_mysql存数据,这里使用SQL和MySQLdb接口存      insert_sql="插入test_unpivot(用户名、主题评分)价值观”      #处理值为NaN的情况      df_pivoted_init=df_pivoted_init.fillna (0)      df_pivoted_init.columns坳的:      在df_pivoted_init.index指数:      值=https://www.yisu.com/zixun/df_pivoted_init.at[指数坳]      如果价值!=0:      insert_sql=insert_sql +”(' % s ', ' % s ' % s)”%(索引、坳值)+ ','      insert_sql=insert_sql.strip (" ")      全球主机、端口、用户、密码、数据库字符集      conn_config={“主机”:主机,“港”:港口,“用户”:用户,“passwd”: passwd,“分贝”:db,“字符集”:字符集}      康涅狄格州=MySQLdb.connect (* * conn_config)      坏蛋=conn.cursor ()      cur.execute(如果不存在“创建表test_unpivot像测试”)      cur.execute (insert_sql)      conn.commit ()      conn.close ()            def save_to_mysql (df_pivoted,表名):      全球主机、端口、用户、密码、数据库字符集      ”“”      只有使用sqllite这样时才能指定反对=连接实例,其他数据库需要使用sqlalchemy生成引擎,引擎的定义可以添加& # 63;来设置字符集和其他属性      ”“”      康涅狄格州=" mysql://% s: % s@ % s: % d/% & # 63; charset=% s " %(用户、密码、主机、端口、db、字符集)      mysql_engine=create_engine(康涅狄格州)      df_pivoted。to_sql (name=,=mysql_engine监狱,if_exists=叭〈?指数=False)            #从测试表读取源数据至DataFrame结构      result_df=get_df ()      #将源数据行转列为二维表格形式      df_pivoted_init df_pivoted=主(result_df)      #将二维表格形式的数据存到新表中进行测试      save_to_mysql (df_pivoted“测试”)      #将被行转列的数据透视,存入test_unpivot表中      透视(df_pivoted_init)      

结果如下:

  

 pandas.DataFrame的主()和unstack()实现行转列

  

关于熊猫DataFrame类自带的主方法:

  

DataFrame。主(==没有列建立索引没有,值=None):

  

返回重塑DataFrame由给定的索引/列值。

  

这里只有3个参数,是因为枢轴之后的结果一定是二维表格,只需要行列及其对应的值,而且也因为是二维表格,透视之后is_pass列是肯定会丢失的,因此一开始我就没查这个列。

  

pandas.DataFrame的主()和unstack()实现行转列