首页 > 编程问答 >Pandas 哈希表给出 key error:0 和 get_item

Pandas 哈希表给出 key error:0 和 get_item

时间:2024-07-21 02:01:31浏览次数:12  
标签:python pandas twitter bigdata

我试图获取两个 pandas 数据表的相同元素,对数据进行索引并将其合并。我将它用于大量数据(数百万)。第一个表 (df) 是恒定的,第二个表 (d2) 在每个循环中都在变化,新元素将与第一个表合并。

这是我的此过程的代码:

df = pd.read_csv("inputfile.csv",header=None)
d1 = pd.DataFrame(df).set_index(0) 

for i in range(0, len(df)):
    try:
            follower_id=twitter.get_followers_ids(user_id=df.iloc[i][0],cursor=next_cursor) 
            

            f=follower_id['ids']
            json.dumps(f)
            d2 = pd.DataFrame(f).set_index(0) 
            match_result = pd.merge(d1,d2,left_index=True,right_index=True) 
            fk=[df.iloc[i][0] for number in range(len(match_result))] 
            DF = pd.DataFrame(fk)

            DF.to_csv(r'output1.csv',header=None,sep=' ',index=None) 
            match_result.to_csv(r'output2.csv', header=None,  sep=' ')

我经历过,这段代码运行良好一段时间,但之后 - 可能与每个循环都会更改的第二个数据库大小有关 - 程序给我以下错误消息,并停止运行:

Traceback (most recent call last):
 File "halozat3.py", line 39, in <module>
d2 = pd.DataFrame(f).set_index(0) #1Trump koveto kovetolistaja
File "/usr/lib/python2.7/dist-packages/pandas/core/frame.py", line 2372, in set_index
level = frame[col].values
File "/usr/lib/python2.7/dist-packages/pandas/core/frame.py", line 1678, in __getitem__
return self._getitem_column(key)
File "/usr/lib/python2.7/dist-packages/pandas/core/frame.py", line 1685, in _getitem_column
return self._get_item_cache(key)
File "/usr/lib/python2.7/dist-packages/pandas/core/generic.py", line 1052, in _get_item_cache
values = self._data.get(item)
File "/usr/lib/python2.7/dist-packages/pandas/core/internals.py", line 2565, in get
loc = self.items.get_loc(item)
File "/usr/lib/python2.7/dist-packages/pandas/core/index.py", line 1181, in get_loc
return self._engine.get_loc(_values_from_object(key))
File "index.pyx", line 129, in pandas.index.IndexEngine.get_loc (pandas/index.c:3656)
File "index.pyx", line 149, in pandas.index.IndexEngine.get_loc (pandas/index.c:3534)
File "hashtable.pyx", line 381, in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:7035)
File "hashtable.pyx", line 387, in          pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:6976)
KeyError: 0

可能是什么问题?


代码中的错误是由于在某些情况下尝试将 DataFrame 设置为不是 DataFrame 中实际值之一的值的索引而导致的。具体来说,当 f 为空列表时,就会发生这种情况,这意味着 follower_id['ids'] 不返回任何值。

可以通过检查 f 在设置索引之前是否为空来解决此错误,如下所示:

df = pd.read_csv("inputfile.csv",header=None)
d1 = pd.DataFrame(df).set_index(0) 

for i in range(0, len(df)):
    try:
        follower_id=twitter.get_followers_ids(user_id=df.iloc[i][0],cursor=next_cursor) 


        f=follower_id['ids']
        json.dumps(f)
        # 如果 f 不为空,则检查 DataFrame 是否为空
        if f:
            d2 = pd.DataFrame(f).set_index(0) 
            match_result = pd.merge(d1,d2,left_index=True,right_index=True) 
            fk=[df.iloc[i][0] for number in range(len(match_result))] 
            DF = pd.DataFrame(fk)

            DF.to_csv(r'output1.csv',header=None,sep=' ',index=None) 
            match_result.to_csv(r'output2.csv', header=None,  sep=' ')
        # 否则,跳过迭代
        else:
            continue
    except Exception as e:
        print(f"Iteration {i}: {e}")
        continue

此代码将在尝试设置索引之前检查 f 列表是否为空。如果为空,则代码将跳过该迭代并继续执行循环中的下一次迭代。这可以防止 KeyError 的发生,并使的代码能够更可靠地运行。

此外,添加一个 try-except 块来捕获循环期间可能发生的任何异常是一个好习惯。这将帮助识别代码中可能出现的任何其他问题,并防止它在出现错误时崩溃。

标签:python,pandas,twitter,bigdata
From: 41502748

相关文章

  • 裁剪时间变量 Python Matplotlib Xarray
    我不确定这是否是一个愚蠢的问题,但我想按时间变量剪辑.nc文件。我在xarray中打开了数据集,但以下ds.sel行(之前已运行)仅返回错误。ds=xr.open_dataset('/Users/mia/Desktop/RMP/data/tracking/mcs_tracks_2015_11.nc')selected_days=ds.sel(time=slice('2015-11-22',......
  • 用于匹配两个数据列表中的项目的高效数据结构 - python
    我有两个列表,其中一个列表填充ID,另一个列表填充进程名称。多个进程名称可以共享一个ID。我希望能够创建一个可以使用特定ID的数据结构,然后返回与该ID关联的进程列表。我还希望能够使用特定的进程名称并返回与其连接的ID列表。我知道我可以为此创建一个字典,但是I......
  • 有人可以解决我的代码中的问题吗?而且我无法在我的电脑上安装 nsetools。如何在 python
    从nsetools导入Nseimportpandasaspdnse=Nse()all_stock_codes=nse.get_stock_codes()companies_with_low_pe=[]对于all_stock_codes中的代码:如果代码=='符号':继续尝试:stock_quote=nse.get_quote(代码)pe_ratio=stock_quote.get('priceT......
  • 如何填充用 geopandas 溶解地理数据框时创建的多多边形中的孔?
    我的目标是绘制MSOA(英国的连续地理单位)集群的边界,为此我从此处下载了MSOA边界的shapefile。然后,我添加一列簇标签并使用geopandas进行溶解。df.dissolve(by='label',aggfunc='sum')当我使用Folium绘制时,有多个内孔,如附图所示。我该如何删除这些?#create......
  • 将 python 脚本的 stdin 重定向到 fifo 会导致 RuntimeError: input():lost sys.stdin
    我有这个python脚本,它的作用是充当服务器,它从重定向到fifo的stdin读取命令:test.py:whileTrue:try:line=input()exceptEOFError:breakprint(f'Received:{line}')在bash中运行命令:mkfifotestfifotest.py<testfifo......
  • Python/Flask mysql 游标:为什么它不起作用?
    fromflaskimportFlaskfromflask_mysqldbimportMySQLapp=Flask(__name__)app.config['MYSQL_HOST']='localhost'app.config['MYSQL_USER']='root'app.config['MYSQL_PASSWORD']='password'a......
  • Python pandas to_csv 导致 OSError: [Errno 22] 参数无效
    我的代码如下:importpandasaspdimportnumpyasnpdf=pd.read_csv("path/to/my/infile.csv")df=df.sort_values(['distance','time'])df.to_csv("path/to/my/outfile.csv")此代码成功从infile.csv(一个3GBcsv文件)读取数据,对其进行排......
  • 从 python 中的字符串列表中提取 def 定义函数的标签
    我想使用Python中的正常def过程创建函数,并将标签分配给从字符串列表中提取的命名空间。如何实现这一点?这个问题的动机:我正在创建一个与sympy兼容的python函数库,供数学家用于符号计算实验。许多函数需要初始化具有相关标签的多个对象的系统,这些标签分别由用户提供的字......
  • 在 Raspberry Pi 4 上使用 Python 从具有 SPI 连接的 MT6816 磁性编码器读取
    我对这个领域完全陌生,并不真正知道自己在做什么并且需要帮助。我正在尝试使用MT681614位磁性编码器通过RaspberryPi的SPI连接读取绝对角度。我有以下问题:在硬件方面,是否只是简单地连接必要的连接(3.3V、MOSI、MISO、SCK、GND、CE01)?对于编码......
  • PythonW 不运行脚本。严重地
    因此,使用Windows10和Python3.6。我创建了一个.py脚本,它可以使用命令pythonmyscript.py在命令提示符下正常运行,但是当我制作该脚本的精确副本并为其赋予扩展名.pyw,并尝试使用pythonw运行它时命令pythonwmyscript.pyw,什么也没有发生......