首页 > 解决方案 > 在 Pandas 中附加 csv 时,获取 float' 对象不可迭代

问题描述

我正在尝试使用 panda df 删除 csv 文件单元格中的重复单词。我发现一些有用的代码可以帮助我读取 csv 并附加到新的 csv 文件。下面是数据集的一个例子。

df = pd.DataFrame({'a': ['Anakin Ana, Anakin Ana', 'Anakin Ana, Chris Cannon', 'Chris Cannon', 'Bella Bold, Chris Cannon, Bella Bold'],
                   'b': ['Bella Bold, Chris Cannon, Chris Cannon', 'Donald Deakon', 'Bella Bold, Bella Bold, ', 'Bella Bold'],
                   'c': ['Chris Cannon', 'Chris Cannon, Donald Deakon, Donald Deakon', 'Chris Cannon', 'Anakin Ana, Bella Bold, Bella Bold']},
                   index=[0, 1, 2])

我试图只删除每个单元格中的重复项。我的数据中有很多列,但我只尝试了“pub_emp_year”列之一。

import pandas as pd
import csv
filepath = "C:/data/Untitled Folder/creditdata.csv"
df = pd.read_csv(filepath,encoding='utf-8')
    
for col in ["pub_emp_year"]:
    df[col]=df[col].str.split(", ").map(set).str.join(", ")

df.to_csv('creditdata2.csv',mode='a',index=False)

但我得到一个错误说

TypeError                                 Traceback (most recent call last)
<ipython-input-11-639c2df4be78> in <module>
      5 
      6 for col in ["pub_emp_year"]:
----> 7     df[col]=df[col].str.split(", ").map(set).str.join(", ")
      8 
      9 df.to_csv('creditdata2.csv',mode='a',index=False)

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\series.py in map(self, arg, na_action)
   3628         dtype: object
   3629         """
-> 3630         new_values = super()._map_values(arg, na_action=na_action)
   3631         return self._constructor(new_values, index=self.index).__finalize__(self)
   3632 

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\base.py in _map_values(self, mapper, na_action)
   1143 
   1144         # mapper is a function
-> 1145         new_values = map_f(values, mapper)
   1146 
   1147         return new_values

pandas\_libs\lib.pyx in pandas._libs.lib.map_infer()

TypeError: 'float' object is not iterable

我发现当我不匹配列表和浮动时会发生这种情况,但不确定我做了什么浮动导致我的所有数据都是列表。

标签: pythonpandasdataframecsv

解决方案


亨利的帮助解决了这个问题!这工作得很好。


import pandas as pd
import csv
filepath = "C:/Users/Jimmy Kim/data/Untitled Folder/creditdata.csv"
df = pd.read_csv(filepath,encoding='utf-8')
    
for col in ["pub_emp_year" ]:
    df[col] = df.loc[df[col].notna(), col].str.split(", ").map(set).str.join(", ")

df.to_csv('creditdata2.csv',mode='a',index=False)

推荐阅读