Python 使用循环将数据从一个表映射到另一个表

Python 使用循环将数据从一个表映射到另一个表,python,pandas,loops,dataframe,Python,Pandas,Loops,Dataframe,我有一个数据帧DF1,它有4个不同的单字命名列和一个标识符列tz: Tz、人口、自行车、住宅、出租车 首先,我想创建一个保留元素索引的字典: for name in len(DF1.columns): name = {tz:DF1.name[tz] for tz in DF1.index} 但是,如果我放置len(SMdata.columns),这会产生int object not iterable错误,或者如果我从for循环中删除len函数,则Dataframe没有对象名称错误 我还

我有一个数据帧DF1,它有4个不同的单字命名列和一个标识符列tz:

Tz、人口、自行车、住宅、出租车

首先,我想创建一个保留元素索引的字典:

for name in len(DF1.columns):
    name = {tz:DF1.name[tz] for tz in DF1.index}
但是,如果我放置len(SMdata.columns),这会产生int object not iterable错误,或者如果我从for循环中删除len函数,则Dataframe没有对象名称错误

我还有另一个数据帧DF2,我正在尝试从第一个数据帧向其中添加列,但最重要的是在其列“LocationID”上使用映射函数

为此,我尝试编写以下代码:

for name in list(DF1.columns):
    Key = name
    DF2[name] = DF2.LocationID.map(key)
但是,我一直遇到“TypeError:'str'对象不可调用”

我不明白为什么这种方法不起作用

编辑:是否可以创建一个循环,用于从列中获取条目,对所有值执行数学运算,并将新val添加到新列中。基本上是此代码的循环应用程序:

Df["log_column_name"] = np.log[Df[column_name]]
import pandas as pd
import numpy as np
df=pd.DataFrame()
df['col1']='a b c d e f'.split()
df['col2']=[1,2,3,4,5,6]
df['col3']=[32,21,'h',2,6,10]
print(df)
rows_dict=df.T.to_dict('list')
print(rows_dict)



  col1  col2 col3
0    a     1   32
1    b     2   21
2    c     3    h
3    d     4    2
4    e     5    6
5    f     6   10
{0: ['a', 1, 32], 1: ['b', 2, 21], 2: ['c', 3, 'h'], 3: ['d', 4, 2], 4: ['e', 5, 6], 5: ['f', 6, 10]}

对于联机的第一个问题

用于len中的名称(DF1.列):

您正试图使for循环通过
len(DF1.columns)
,但Python中的len()函数返回整数。您可能希望通过DF1.1列本身进行循环:

DF1中的名称。列:

对于第二个问题,很可能在代码中的某个地方,您进行了一个与此类似的调用

str=../

错误是str是python中不可调用的对象,因此请确保不要使用任何名为“str”的变量(因为str在python中是一个特殊的名称)


参考在线第一个问题的问题

用于len中的名称(DF1.列):

您正试图使for循环通过
len(DF1.columns)
,但Python中的len()函数返回整数。您可能希望通过DF1.1列本身进行循环:

DF1中的名称。列:

对于第二个问题,很可能在代码中的某个地方,您进行了一个与此类似的调用

str=../

错误是str是python中不可调用的对象,因此请确保不要使用任何名为“str”的变量(因为str在python中是一个特殊的名称)

从问题中引用

这只执行一次,因为
len()
返回一个值。。。然后您需要在df.columns中为名称指定
。。。但最好使用whit。您不需要for循环。熊猫为它提供了方法

示例:

Df["log_column_name"] = np.log[Df[column_name]]
import pandas as pd
import numpy as np
df=pd.DataFrame()
df['col1']='a b c d e f'.split()
df['col2']=[1,2,3,4,5,6]
df['col3']=[32,21,'h',2,6,10]
print(df)
rows_dict=df.T.to_dict('list')
print(rows_dict)



  col1  col2 col3
0    a     1   32
1    b     2   21
2    c     3    h
3    d     4    2
4    e     5    6
5    f     6   10
{0: ['a', 1, 32], 1: ['b', 2, 21], 2: ['c', 3, 'h'], 3: ['d', 4, 2], 4: ['e', 5, 6], 5: ['f', 6, 10]}
问题2

for name in list(DF1.columns):
    DF2[name] = DF2.LocationID.map(key)
在任何情况下,您都会将df2数据添加到其他df2列,但您永远不会使用df1数据。。。请提供一个你想做什么的例子

这只执行一次,因为
len()
返回一个值。。。然后您需要在df.columns中为名称指定
。。。但最好使用whit。您不需要for循环。熊猫为它提供了方法

示例:

Df["log_column_name"] = np.log[Df[column_name]]
import pandas as pd
import numpy as np
df=pd.DataFrame()
df['col1']='a b c d e f'.split()
df['col2']=[1,2,3,4,5,6]
df['col3']=[32,21,'h',2,6,10]
print(df)
rows_dict=df.T.to_dict('list')
print(rows_dict)



  col1  col2 col3
0    a     1   32
1    b     2   21
2    c     3    h
3    d     4    2
4    e     5    6
5    f     6   10
{0: ['a', 1, 32], 1: ['b', 2, 21], 2: ['c', 3, 'h'], 3: ['d', 4, 2], 4: ['e', 5, 6], 5: ['f', 6, 10]}
问题2

for name in list(DF1.columns):
    DF2[name] = DF2.LocationID.map(key)


在任何情况下,您都会将df2数据添加到其他df2列,但您永远不会使用df1数据。。。请提供一个示例,说明您到底想做什么

哪一行是发生此问题的那一行?最好提供更多的代码。第二个问题的关键是什么?哪一行引起了
类型错误
?更新了问题。我关心的是,我想基本上合并两个表,使用DF2中的LocationID列。我不想使用.merge函数,但要从DF1列创建一个字典,然后使用.map函数与DF2合并。可以选择使用dict,但这样做更简单。。你能展示一个df1和df2的例子和你的预期输出吗?哪一行是发生这个问题的那一行?最好提供更多的代码。第二个问题的关键是什么?哪一行引起了
类型错误
?更新了问题。我关心的是,我想基本上合并两个表,使用DF2中的LocationID列。我不想使用.merge函数,但要从DF1列创建一个字典,然后使用.map函数与DF2合并。可以选择使用dict,但这样做更简单。。你能给出一个df1和df2的例子以及你的预期输出吗?问题的第一部分呢?你能给我一些建议吗,因为我似乎无法让它运行!哦,我的错。我只是掩饰了第一部分。我现在要仔细看一看。@pratikwatwani我想您是在长度上使用for循环,它是一个整数。您需要为for循环提供一些列表或带有迭代器的东西来代替循环。我在问题中提到,即使移除len函数,也不存在我使用循环创建的字典
用于列表中的名称(DF1.columns):
这不是必需的,只需要
用于df.columns中的名称
问题的第一部分如何?你能给我一些建议吗,因为我似乎无法让它运行!哦,我的错。我只是掩饰了第一部分。我现在要仔细看一看。@pratikwatwani我想您是在长度上使用for循环,它是一个整数。您需要为for循环提供一些列表或带有迭代器的东西来代替循环。我在问题中提到,即使移除len函数,也不存在我使用循环创建的字典<代码>用于列表中的名称(DF1.columns):
这不是必需的,只需要
用于df.columns中的名称