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