python - 如何将列表的元素动态分配给满足熊猫特定条件的单元格?
问题描述
我正在做动物研究并使用输出大量 csv 文件的自动操作框,我有多个动物每天运行多个会话,因此为了理解我的数据,我遍历多个 csv 文件并将相关数据提取到单独的excel文件。我设法使几乎所有代码都动态化,除了一个关键位:我必须将主题 ID 分配给对应于该主题数据的多个行范围。
我目前这样做的方式是首先按照当天运行的顺序提取 16 个主题的 [ID] 列表,然后在我的数据框中创建一个新的会话顺序列,以告知数据是哪个会话为了。然后我创建了一个空白的“ID”列,然后手动将每个行范围从会话 1 分配到 [ID] 列表中的第一个元素,然后将会话 2 分配到第二个元素,依此类推,这里是代码例子:
df['ID'] = 0
df.at[(df['Session'] == 1), 'ID'] = ID[0]
df.at[(df['Session'] == 2), 'ID'] = ID[1]
df.at[(df['Session'] == 3), 'ID'] = ID[2]
df.at[(df['Session'] == 4), 'ID'] = ID[3]
df.at[(df['Session'] == 5), 'ID'] = ID[4]
df.at[(df['Session'] == 6), 'ID'] = ID[5]
df.at[(df['Session'] == 7), 'ID'] = ID[6]
df.at[(df['Session'] == 8), 'ID'] = ID[7]
df.at[(df['Session'] == 9), 'ID'] = ID[8]
df.at[(df['Session'] == 10), 'ID'] = ID[9]
df.at[(df['Session'] == 11), 'ID'] = ID[10]
df.at[(df['Session'] == 12), 'ID'] = ID[11]
df.at[(df['Session'] == 13), 'ID'] = ID[12]
df.at[(df['Session'] == 14), 'ID'] = ID[13]
df.at[(df['Session'] == 15), 'ID'] = ID[14]
df.at[(df['Session'] == 16), 'ID'] = ID[15]
到目前为止,这对我很有帮助,但是我的 n 数已更改为 15,现在我混合了具有不同 n 数的 CSV,并且一旦循环到达 n = 15,我就会收到“列表索引超出范围”错误文件。由于我的工作性质,n 数字很可能会在未来多次更改,因此我想调整我的代码以适应这种情况。我的主要问题是我不熟悉 Python 的基本原理,原因是我需要快速进步,从不知道如何用任何语言编写代码到开发自己的脚本,为古怪的 CSV 量身定做,我决定'
我尝试了不同的方法,但都没有奏效,所以我的问题是如何使这个动态化,以便它适用于各种 n 数字?
很多很多提前谢谢!
解决方案
您应该只创建一个从会话号到 ID 的映射。
假设您的会话将始终从 1 开始编号,这将起作用:
SESSION_ID = dict(enumerate(ID, 1))
然后简单地说:
df['ID'] = df['Session'].map(SESSION_ID)
推荐阅读
- python - 当 regex.serach 发生时,Flask 应用程序请求处理被阻塞的问题?
- macos - Android Studio 能否在配备 ARM 处理器的 Mac 上运行?
- javascript - 如何在 Cheerio 中执行索引以进行网页抓取
- telegram - 如何获取加入群组的用户的电报列表
- c++ - ETL 可以与 Atmel Studio 一起使用吗?
- python - 无法通过通过 VirtualBox cmd 运行的 python 脚本创建空文件
- c# - 发送半个身体后,WireMock 失败
- php - 我想在 php 中将图像上传到同一服务器上的不同目录中
- javascript - Discord.js 检查消息中的用户提及
- kotlin - kotlin 对 int 的可为空引用的相等性测试