pycharm连接mysql后如何将mysql里多个含有主键外键的文件中的相关列提取出来以在pycharm里形成新的dataframe

这是我mysql里存储的文件以外键相联系,我如何在pycharm与mysql连接后在pycharm里来通过主键外键的索引来建立新的dataframe。

比如我想找出sets的themes与color和parts的联系,我怎么能将3个列组成一个新的dataframe呢?

麻烦大佬帮忙解答一下,谢谢!!

[set_num, name, year,theme_id, num_parts] = set_data
themes = pd.DataFrame(columns=('id''name''parent_id'))
等下这三个属性来自哪?'id', 'name', 'parent_id'
for i in range(len(name)):
    data.loc[i] = [set_num[i], name[i], theme_id[i]]
大概就这么个意思
for i in range(len(name)):
    themes.loc[i] = [set_num[i], name[i], theme_id[i]]

loc函数的三个参数是什么意思呀?

就是themes里面的数据

我想分析的就是sets里面的theme_id和通过set_num一直连下去得到的part_num对应的part_name和连下去对应的color_id对应的颜色名的关系


像themes.loc和data.loc是在怎么索引呢?

 那不好意思,可能我理解错了,我以为你要从sets里面提取数据到themes

嗯没事没事

我觉得可能是不是也差不多?

我就是想建一个新的dataframe

然后有三个列 sets的themes_id,inventory_parts的color_id,inventory_parts的part_num

我在数据库里设置好主键外键了不知道这有没有用

 然后数据怎么来呢

数据已经有的

这样pycharm连接mysql

然后把里面8个excel读到df1~df8里

 大致就这么个流程

 你直接告诉我,新建的dataframe数据是df1~df8的哪一列

我帮你写

啊好的谢谢谢谢!!

df6(sets)的theme_id, df2(inventory_parts)的part_num, df2(inventory_parts)的color_id


可以再增加两列嘛

df5的name,df1的name

# 表都是一样长的吧?不然可能出问题
# 你自己把列的名字改一下
new = pd.DataFrame(columns=('df6.theme_id', 'df2.part_num', 'df2.color_id','df5.name','df1.name'))
for i in range(len(df2.id)):
    new.loc[i] = [df6.theme_id[i], df2.part_num[i],
                  df2.color_id[i], df5.name[i], df1.name[i]]
print(new)

虽然表不是一样长的

我发现名字我对错了,现在改成这样了

new = pd.DataFrame(columns=('df7.theme_id', 'df3.part_num', 'df3.color_id','df6.name','df1.name'))
for i in range(len(df3.inventory_id)):
    new.loc[i] = [df7.theme_id[i], df3.part_num[i],
                  df3.color_id[i], df6.name[i], df1.name[i]]
print(new)
表不一样长咋合并...

就比如以sets的theme_id为第一列然后将这个theme_id对应的part_num和color_id都找出来然后对应上去

这样可以嘛

你试一下吧,写法挺简单的,反正长度要一样

不然你的表就没有意义

new = pd.DataFrame(columns=('df7.theme_id', 'df3.part_num', 'df3.color_id','df6.name','df1.name'))
for i in range(len(df7.theme_id)):
    new.loc[i] = [df7.theme_id[i], df3.part_num[i],
                  df3.color_id[i], df6.name[i], df1.name[i]]
print(new)

我这样改了它还是有dataframe没有 attribute'name'那个错误

dataframe不是没有设置name什么的嘛

 你表的第一行是不是数据

啊不是

是列名

那从i=1开始?

 是列名就没错啊...
 df1.列名[i]
 除非你的列名不是叫name

是数据文件的列名不是name?

对,你把name改成列名
new.columns.name = 'name'

这样吗?

    id      名字        parent_id
0  奖学金   123.0      123.0
1  生活费  2000.0     2000.0


我要获得id列的数据 df.id
我要获得名字列的数据 df.名字
df.id[0]就是奖学金
 懂了吗?
df1.rename(columns={'color_name':'name'}, inplace = True)
df6.rename(columns={'part_name':'name'}, inplace = True)

我把名字改了

Traceback (most recent call last):

 File "D:\1.py", line 72, in <module>

  df3.color_id[i], df6.name[i], df1.name[i]]

 File "D:\1\venv\lib\site-packages\pandas\core\series.py", line 871, in __getitem__

  result = self.index.get_value(self, key)

 File "D:\1\venv\lib\site-packages\pandas\core\indexes\base.py", line 4405, in get_value

  return self._engine.get_value(s, k, tz=getattr(series.dtype, "tz", None))

 File "pandas\_libs\index.pyx", line 80, in pandas._libs.index.IndexEngine.get_value

 File "pandas\_libs\index.pyx", line 90, in pandas._libs.index.IndexEngine.get_value

 File "pandas\_libs\index.pyx", line 138, in pandas._libs.index.IndexEngine.get_loc

 File "pandas\_libs\hashtable_class_helper.pxi", line 998, in pandas._libs.hashtable.Int64HashTable.get_item

 File "pandas\_libs\hashtable_class_helper.pxi", line 1005, in pandas._libs.hashtable.Int64HashTable.get_item

KeyError: 184

还是有报错