背景: 我有两列:“地址”和“ raw_data”。数据集如下所示: this is just a sample I made up, the original dataset is over 6m rows and in a different language
问题: 我需要查找所有不匹配“地址”和“ raw_data”的数据,这意味着从“地址”到“ raw_data”的数据登录时会犯一些错误。
我刚接触熊猫。我的计划是用逗号分隔'raw_data'列,然后将新产生的列与原始的“ address”列进行比较(以查看'address'列是否具有那些信息,如果没有,那意味着有错误吗?)。
就像我说的那样,我是熊猫的新手,这就是我到目前为止所拥有的。
import pandas as pd
columns = ['address', 'raw_data']
df=pd.read_csv('address.csv', usecols=columns)
df = pd.concat([df['address'], df['raw_data'].str.split(',', expand=True)], axis=1)
现在,新列的信息如下:“ CITY”:“ ATLANTA”。我想让列只包含亚特兰大而不包含所有冒号和“ CITY”,以便将信息与“ address”列进行比较。 我应该怎么做?
此外,在我目前的熊猫学习经验上,我还不知道如何比较两列。有人可以帮新手吗?非常感谢!
PS:通过比较两列,我的意思是检查一列是否在第二列中包含字符,而不是检查两列是否相等。只是想指出这一点。
答案 0 :(得分:0)
df = pd.DataFrame([[2, 2], [3, 6],[1,1]], columns = ["col1", "col2"])
comparison_column = np.where(df["col1"] == df["col2"], True, False)
df["equal"] = comparison_column
col1 col2 equal
2 2 True
3 6 False
1 1 True
答案 1 :(得分:0)
您可以将它们与,
分开,将它们与dict
分开。您可以使用apply函数将自定义函数映射到列。在这种情况下,您已经定义了一个函数,该函数可以访问字典的键并提取值。
df['address_raw'] = df['raw_data'].apply(lambda x: x['address'])
df['city_raw'] = df['raw_data'].apply(lambda x: x['CITY'])
df['addrline2_raw'] = df['raw_data'].apply(lambda x: x['ADDR_LINE_2'])
df['addrline3_raw'] = df['raw_data'].apply(lambda x: x['ADDR_LINE_3'])
df['utmnorthing_raw'] = df['raw_data'].apply(lambda x: x['UTM_NORTHING'])
这些行将在字典中创建每个字段的列,然后您可以将它们进行比较:
df['address'] == df['address_raw']
答案 2 :(得分:0)
我将使用以下数据:
import numpy as np
import pandas as pd
j = {"address":"foo","b": "bar"}
j2 = {"address":"foo2","b": "bar2"}
values = [["foo", j], ["bar", j2]]
df = pd.DataFrame(data=values, columns=["address", "raw_data"])
df
address raw_data
0 foo {'address': 'foo', 'b': 'bar'}
1 bar {'address': 'foo2', 'b': 'bar2'}
我将在另一个df(df2)中将raw_data的列与 .values.tolist()分开:
df2 = pd.DataFrame(df['raw_data'].values.tolist())
df2
address b
0 foo bar
1 foo2 bar2
要进行比较,请使用:
df.address == df2.address
0 True
1 False
如果您需要将其保存在原始df中,则可以添加一列:
df["result"] = df.address == df2.address