gpt4 book ai didi

Python Pandas 复制并修改数据框中的一些行

转载 作者:太空宇宙 更新时间:2023-11-03 15:46:49 25 4
gpt4 key购买 nike

我有一个像这样的数据框

Names;        Count;  PartNr
R1, R2,...Rn; n; 1234-5678
C1, C2; 2; 1234-6789

列表应导出为 csv 文件,以便导入到另一个专有软件中。该软件在“名称”列中最多接受 100 个字符,如果有更多数据,我应该换行现有行,复制整个列并添加其余名称。因此,名称列中应有多行,最多 100 个字符。零件的绝对计数应该只在第一行,因此计数值应设置为零。

Names;             Count; PartNr
R1, R2,...Ra; n; 1234-5678
Ra+1, Ra+2,...Rb; 0; 1234-5678
Rb+1, Rb+2,...Rn; 0; 1234-5678
C1, C2; 2; 1234-6789

有没有好的方法可以直接在 pandas 中修改它?

我尝试迭代行,但不允许我修改正在迭代的数据帧,所以这不起作用。还有更好的解决方案吗?

数据帧的长度为 10 到 1000 倍,并且只有少数行的名称太长,因此性能并不重要。

最佳答案

我认为 Pandas 中没有特别好的方法可以做到这一点。每当 DataFrame 保存一列列表,并且您想要进行某种需要迭代列表的计算时,您就被迫为该列中的每个项目(即列表)调用一次 Python 函数。这会损害性能,因为这里无法应用 Pandas 的快速矢量化操作。这个故事的寓意是,如果可能的话,避免将列表放入 DataFrame 中。

(当然,就您的情况而言,您似乎想在特定的位置准备一个 CSV另一个应用程序的格式。因此,如果这需要 DataFrame 中的列表,那么它。)

正如您所提到的,您可以迭代行。您可以使用 iterrowsitertuples。我将使用 itertuples 因为它往往更快:

import itertools as IT
import numpy as np
import pandas as pd

Rs = ['R{}'.format(i) for i in range(1,251)]
Cs = ['C1', 'C2']
df = pd.DataFrame({'Names': [Rs, Cs], 'Count': ['n',0],
'PartNr':['1234-5678','1234-6789']})

def chunks(seq, n):
# http://stackoverflow.com/a/312464/190597 (Ned Batchelder)
""" Yield successive n-sized chunks from seq."""
for i in range(0, len(seq), n):
yield seq[i:i + n]

result = []
for row in df.itertuples():
result.append(pd.DataFrame({'Names': list(chunks(row.Names, 100)),
'Count':row.Count,
'PartNr':row.PartNr}))

result = pd.concat(result, axis=0, ignore_index=True)
print(result)

产量

  Count                                              Names     PartNr
0 n [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11,... 1234-5678
1 n [R101, R102, R103, R104, R105, R106, R107, R10... 1234-5678
2 n [R201, R202, R203, R204, R205, R206, R207, R20... 1234-5678
3 0 [C1, C2] 1234-6789
<小时/>

itertuples for-loop内,为每一行构造一个新的DataFrame。DataFrame 被收集到一个名为 result 的列表中。在for循环之后完成后,DataFrame 列表将连接成一个 DataFrame。

关于Python Pandas 复制并修改数据框中的一些行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41679779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com