我有两个数据帧。你知道吗
df1型:
filename|data
fileA|1
fileB|33
fileC|343
df2型:
path|filesize|filetype
/tmp/fileA.csv|123|csv
/tmp/fileB.csv|123|csv
/tmp/fileC.csv|3534|csv
/tmp/fileD.csv|234|csv
我希望结果是
filename|data|path
fileA|1|/tmp/fileA.csv
fileB|33|/tmp/fileB.csv
fileC|343|/tmp/fileC.csv
fileD|3243|/tmp/fileD.csv
这似乎非常简单,但我似乎无法将其用于.assign()。我需要将df1.filename中的每一行与df2.filepath中的每一行进行匹配,然后将df1['filepath']添加到df1中。你知道吗
我尝试了下面的方法,但是它抱怨说这个序列不是“可哈希的”
df1.assign(path = lambda x: df2[df2.path.str.contains(x.filename + ".csv")][path])
{TypeError}'Series' objects are mutable, thus they cannot be hashed
我进行了测试,以确保我的df1.assign()是正确的
df1.assign(path = lambda x: x.filename)
它工作了,只是在df1上附加了文件名(这是我所期望的)。你知道吗
我假设问题区域是“contains(x.filename+”.csv“)作为“Series”。如果我把它改成x。filename.values文件名然后我得到
{TypeError}unhashable type: 'numpy.ndarray'. I don't understand what "x" is. I assume its a Series object, but no idea how to tell which "row" its associated with if it is.
我可以强行这样做,只是在df1上循环,但df1是2M+的记录和循环似乎普遍不赞成对熊猫性能的原因。有人能指出我做错了什么吗?你知道吗
IIUC,我想您应该使用str accessor和
extract
以及regex从路径中提取文件名并合并文件名:输出:
相关问题 更多 >
编程相关推荐