这是我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
还是有报错