【问题标题】:How to rename columns obtained by SQL INNER JOIN?如何重命名 SQL INNER JOIN 获得的列?
【发布时间】:2019-05-05 07:52:27
【问题描述】:

我正在阅读网站上的 SQL 和 Pandas 的比较 http://pandas.pydata.org/pandas-docs/stable/comparison_with_sql.html。在这里,当我在做 sql inner join 时,列的名称是重复的。如何给他们起合适的名字?

import numpy as np
import pandas as pd
import sqlite3
np.random.seed(100)


# database
con = sqlite3.connect("mydb.db")


# dataframes
df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
                     'value': np.random.randn(4)})

df2 = pd.DataFrame({'key': ['B', 'D', 'D', 'E'],
                     'value': np.random.randn(4)})

print(df1, '\n\n', df2)

# add dataframes to database
df1.to_sql('df1',con,if_exists='replace',index=False)
df1.to_sql('df2',con,if_exists='replace',index=False)


q = """
SELECT *
FROM df1
INNER JOIN df2
  ON df1.key = df2.key;
"""
pd.read_sql_query(q,con)

这给了

 key     value key     value
0   B  0.342680   B  0.981321
1   D -0.252436   D  0.221180
2   D -0.252436   D  0.514219

如何获取表格:

    key   df1_value   df2_value
0   B  0.342680  0.981321
1   D -0.252436  0.514219
2   D -0.252436  0.221180

【问题讨论】:

    标签: sql pandas sqlite


    【解决方案1】:

    使用as:

    SELECT df1.key as key1, df1.value as df1_value, df2.value as df2_value
    FROM df1 INNER JOIN 
         df2
         ON df1.key = df2.key;
    

    因为键是相同的,所以不需要包含两个表中的值。

    【讨论】:

    • 只有当我们有很少的列要重命名时,这才很棒,是否有 for-loop 之类的技术可以自动完成这项工作?
    • @MilkyWay007 。 . .不,这不是 SQL 的工作方式。不过,您可以使用查询或电子表格生成列。或者,您甚至可以使用动态 SQL。
    • 谢谢,我在想既然在 python pandas 中是可能的,在 SQL 中可能是可能的。
    【解决方案2】:

    您需要为列名设置别名。您希望指定要返回的列,并使用as 关键字来选择结果集中列的显示名称,而不是使用SELECT * 构造。

    欲了解更多信息,请参阅the sqlite documentation

    SELECT 
        df1.key,
        df1.value as df1_value,
        df2.value as df2_value
    FROM df1
    INNER JOIN df2
        ON df1.key = df2.key
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-09
      • 2013-07-01
      • 2016-12-23
      相关资源
      最近更新 更多