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

时间:2019-09-21 21:58:56

标签: 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对象中就无法迭代,或者如果我从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]]

2 个答案:

答案 0 :(得分:1)

在线上的第一个问题

for name in len(DF1.columns):

您试图通过len(DF1.columns)进行for循环,但是Python中的len()函数返回整数。相反,您可能想要遍历DF1.columns本身:

for name in DF1.columns:

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

str = ../

错误提示str是python中不可调用的对象,因此请确保不要使用任何名为'str'的变量(因为str在Python中是特殊名称)。

参考问题here

答案 1 :(得分:1)

for name in len(DF1.columns): 

这仅执行一次,因为len()返回一个值...那么您需要for name in df.columns ...,但最好使用DataFrame.to_dict白色DataFrame.transpose。您不需要for循环。熊猫提供了方法。

示例:

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数据...请提供一个示例,明确说明您想做的事情