Python Pandas 迭代值列表并写入单独的文本文件
Python Pandas iterating values list and writing to seperate text files
我正在使用如下所示的 CSV 数据集:
img_id obj_id xcen ycen width height
0 94a69b66-23f0-11e9-a78e-2f2b7983ac0d 0 0.377734 0.091667 0.071094 0.183333
1 94a6a3a4-23f0-11e9-a78f-ebd9c88ef3e8 0 0.375781 0.090972 0.075000 0.181944
2 94a6a430-23f0-11e9-a790-2b5f72f1667a 0 0.378516 0.091667 0.069531 0.183333
3 94a6a48a-23f0-11e9-a791-fb958b6ab6b3 0 0.391406 0.106944 0.076563 0.213889
4 94a6a4da-23f0-11e9-a792-f320b734bd9b 0 0.395313 0.106250 0.068750 0.212500
5 94a6a534-23f0-11e9-a793-c7e8fecc9fa8 0 0.362109 0.127778 0.105469 0.225000
我想做的是将每一行写入一个单独的文本文件,每列值在一行中用逗号分隔。
我只是将 img_id 从写入文本文件中删除,因为我使用 img_id 来命名各个文本文件。
我一直在尝试不同的方法,但在将每一行写入其各自的文本文件时遇到问题。我已经成功地让每个单独的文本文件以其 img_id.
命名
例如,第一个 img_id 文本文件将包含类似这样的内容
0, 0.377734, 0.091667, 0.071094, 0.183333
目前,我正在尝试迭代一列,而不是每一行都进入相应的文本文件,它采用我使用 .values()
方法获得的整个列表,并将其放入每个文本文件中,例如这个
[0,0,0,0,0,0.......0,0,0,0,0,0]
另外一些 img_ids 是相同的所以我想防止在我的代码创建它时用另一个同名的 txt 文件覆盖一个 txt 文件,而不是如果有多个 img_id 然后不是创建另一个文本文件并且(我假设)用相同的 img_id 覆盖以前的文本文件,而是将该行添加到文本文件所以现在有 2 行是这样的:
94a6a54-23f0-11e9-a793-c7e8fecc9fa8.txt
的内容
0, 0.362109, 0.127778, 0.105469, 0.225000
0, 0.175781, 0.283642, 0.210913, 0.293922
这是我目前正在使用的代码。
file = '{}.txt'
a = df['img_id'].values
b = df['object_class'].values
c = df['xcen'].values
d = df['ycen'].values
e = df['width'].values
f = df['height'].values
b = str(b)
c = str(c)
d = str(d)
e = str(e)
f = str(f)
for x in a:
with open(file.format(x), 'w') as f:
for i in b:
f.write(i)
示例数据:
>>> df
img_id object_class xcen ycen width height
0 b192cbd4-7958-4a82-8f90-42217076a66c 4 0.211284 0.428579 0.287383 0.683370
1 b192cbd4-7958-4a82-8f90-42217076a66c 2 0.840717 0.040433 0.192738 0.545159
2 9d452f25-aa60-4fe1-9165-a1a8a981a372 2 0.840717 0.040433 0.192738 0.545159
3 3fa5d0d9-c781-40ad-a8f5-a1eae7d51b98 9 0.741793 0.098438 0.707242 0.102758
4 706ad967-11a6-4e6f-85bc-24bc204597f4 4 0.786071 0.735364 0.661866 0.453724
5 1b577e42-d037-4f7b-918e-1c7e6cc7e7a1 17 0.513458 0.012236 0.856802 0.894129
6 c4c16c64-30cd-450b-ab08-543c4818f1f3 13 0.625725 0.765523 0.007714 0.678993
7 329b908e-ce41-4fd1-b671-b20909c3b31d 10 0.784206 0.831250 0.728761 0.809600
8 fd83b03c-2a84-4cb3-834d-714167475104 7 0.508803 0.137691 0.290492 0.206802
9 6ce64fd0-ca9b-47e8-ae1d-049a87468197 13 0.919442 0.168500 0.995826 0.250895
10 66ddffca-fdea-444f-ae79-d4ee284b9385 12 0.920211 0.803805 0.360863 0.866571
导出文件:
for filename, data in df.groupby("img_id"):
data.drop(columns="img_id").to_csv(f"{filename}.txt", header=None, index=None)
我正在使用如下所示的 CSV 数据集:
img_id obj_id xcen ycen width height
0 94a69b66-23f0-11e9-a78e-2f2b7983ac0d 0 0.377734 0.091667 0.071094 0.183333
1 94a6a3a4-23f0-11e9-a78f-ebd9c88ef3e8 0 0.375781 0.090972 0.075000 0.181944
2 94a6a430-23f0-11e9-a790-2b5f72f1667a 0 0.378516 0.091667 0.069531 0.183333
3 94a6a48a-23f0-11e9-a791-fb958b6ab6b3 0 0.391406 0.106944 0.076563 0.213889
4 94a6a4da-23f0-11e9-a792-f320b734bd9b 0 0.395313 0.106250 0.068750 0.212500
5 94a6a534-23f0-11e9-a793-c7e8fecc9fa8 0 0.362109 0.127778 0.105469 0.225000
我想做的是将每一行写入一个单独的文本文件,每列值在一行中用逗号分隔。
我只是将 img_id 从写入文本文件中删除,因为我使用 img_id 来命名各个文本文件。
我一直在尝试不同的方法,但在将每一行写入其各自的文本文件时遇到问题。我已经成功地让每个单独的文本文件以其 img_id.
命名例如,第一个 img_id 文本文件将包含类似这样的内容
0, 0.377734, 0.091667, 0.071094, 0.183333
目前,我正在尝试迭代一列,而不是每一行都进入相应的文本文件,它采用我使用 .values()
方法获得的整个列表,并将其放入每个文本文件中,例如这个
[0,0,0,0,0,0.......0,0,0,0,0,0]
另外一些 img_ids 是相同的所以我想防止在我的代码创建它时用另一个同名的 txt 文件覆盖一个 txt 文件,而不是如果有多个 img_id 然后不是创建另一个文本文件并且(我假设)用相同的 img_id 覆盖以前的文本文件,而是将该行添加到文本文件所以现在有 2 行是这样的:
94a6a54-23f0-11e9-a793-c7e8fecc9fa8.txt
的内容0, 0.362109, 0.127778, 0.105469, 0.225000
0, 0.175781, 0.283642, 0.210913, 0.293922
这是我目前正在使用的代码。
file = '{}.txt'
a = df['img_id'].values
b = df['object_class'].values
c = df['xcen'].values
d = df['ycen'].values
e = df['width'].values
f = df['height'].values
b = str(b)
c = str(c)
d = str(d)
e = str(e)
f = str(f)
for x in a:
with open(file.format(x), 'w') as f:
for i in b:
f.write(i)
示例数据:
>>> df
img_id object_class xcen ycen width height
0 b192cbd4-7958-4a82-8f90-42217076a66c 4 0.211284 0.428579 0.287383 0.683370
1 b192cbd4-7958-4a82-8f90-42217076a66c 2 0.840717 0.040433 0.192738 0.545159
2 9d452f25-aa60-4fe1-9165-a1a8a981a372 2 0.840717 0.040433 0.192738 0.545159
3 3fa5d0d9-c781-40ad-a8f5-a1eae7d51b98 9 0.741793 0.098438 0.707242 0.102758
4 706ad967-11a6-4e6f-85bc-24bc204597f4 4 0.786071 0.735364 0.661866 0.453724
5 1b577e42-d037-4f7b-918e-1c7e6cc7e7a1 17 0.513458 0.012236 0.856802 0.894129
6 c4c16c64-30cd-450b-ab08-543c4818f1f3 13 0.625725 0.765523 0.007714 0.678993
7 329b908e-ce41-4fd1-b671-b20909c3b31d 10 0.784206 0.831250 0.728761 0.809600
8 fd83b03c-2a84-4cb3-834d-714167475104 7 0.508803 0.137691 0.290492 0.206802
9 6ce64fd0-ca9b-47e8-ae1d-049a87468197 13 0.919442 0.168500 0.995826 0.250895
10 66ddffca-fdea-444f-ae79-d4ee284b9385 12 0.920211 0.803805 0.360863 0.866571
导出文件:
for filename, data in df.groupby("img_id"):
data.drop(columns="img_id").to_csv(f"{filename}.txt", header=None, index=None)