回答編集履歴

6

iterrows() を使用する方法に変更

2025/02/26 13:15

投稿

melian
melian

スコア21049

test CHANGED
@@ -1,11 +1,10 @@
1
- 行単位処理していくのはどうでしょうか
1
+ 以下のコードは `pandas.DataFrame.iterrows()` を利用して、行ごとにファイル(`ans{i}.txt`)への保存を行ます
2
2
  ```python
3
3
  import pandas as pd
4
4
 
5
- df = pd.read_csv("sample.csv",header=None)
5
+ df = pd.read_csv("sample.csv", header=None)
6
- for j in df[df.any(axis=1)].index:
6
+ for j, row in df[df.any(axis=1)].iterrows():
7
7
  with open(f'ans{j}.txt', 'w') as ans:
8
- row = df.iloc[j]
9
8
  for i, value in row[row.ne(0)].items():
10
9
  ans.write(f'{j=}\n{i=}\n{value}\n\n')
11
10
  ```

5

apply() を使用しない方法に変更

2025/02/26 07:57

投稿

melian
melian

スコア21049

test CHANGED
@@ -1,16 +1,15 @@
1
- `pandas.DataFrame.apply()` 一行づつ処理していくのはどうでしょうか。
1
+ 行単位で処理していくのはどうでしょうか。
2
2
  ```python
3
3
  import pandas as pd
4
4
 
5
- def save_data(row):
5
+ df = pd.read_csv("sample.csv",header=None)
6
- j, c_idx = row.name, row[row.ne(0)].index
6
+ for j in df[df.any(axis=1)].index:
7
7
  with open(f'ans{j}.txt', 'w') as ans:
8
- for i in c_idx:
8
+ row = df.iloc[j]
9
+ for i, value in row[row.ne(0)].items():
9
- ans.write(f'{j=}\n{i=}\n{row[i]}\n\n')
10
+ ans.write(f'{j=}\n{i=}\n{value}\n\n')
11
+ ```
10
12
 
11
- df = pd.read_csv("sample.csv",header=None)
12
- df.apply(save_data, axis=1)
13
- ```
14
13
  ### 追記
15
14
 
16
15
  `numpy.argwhere()` と `itertools.groupby()` を利用する場合です。

4

追記

2025/02/26 07:09

投稿

melian
melian

スコア21049

test CHANGED
@@ -11,4 +11,17 @@
11
11
  df = pd.read_csv("sample.csv",header=None)
12
12
  df.apply(save_data, axis=1)
13
13
  ```
14
+ ### 追記
14
15
 
16
+ `numpy.argwhere()` と `itertools.groupby()` を利用する場合です。
17
+ ```python
18
+ import numpy as np
19
+ import pandas as pd
20
+ from itertools import groupby
21
+
22
+ arr = pd.read_csv("sample.csv",header=None).to_numpy()
23
+ for j, c_idx in groupby(np.argwhere(arr), key=lambda x: x[0]):
24
+ with open(f'ans{j}.txt', 'w') as ans:
25
+ for _, i in c_idx:
26
+ ans.write(f'j={j}\ni={i}\n{arr[j,i]}\n\n')
27
+ ```

3

i と j を取り違えていたのを修正

2025/02/26 05:35

投稿

melian
melian

スコア21049

test CHANGED
@@ -3,10 +3,10 @@
3
3
  import pandas as pd
4
4
 
5
5
  def save_data(row):
6
- i, c_idx = row.name, row[row.ne(0)].index
6
+ j, c_idx = row.name, row[row.ne(0)].index
7
- with open(f'ans{i}.txt', 'w') as ans:
7
+ with open(f'ans{j}.txt', 'w') as ans:
8
- for j in c_idx:
8
+ for i in c_idx:
9
- ans.write(f'{j=}\n{i=}\n{row[j]}\n\n')
9
+ ans.write(f'{j=}\n{i=}\n{row[i]}\n\n')
10
10
 
11
11
  df = pd.read_csv("sample.csv",header=None)
12
12
  df.apply(save_data, axis=1)

2

2025/02/26 04:49

投稿

melian
melian

スコア21049

test CHANGED
@@ -3,12 +3,12 @@
3
3
  import pandas as pd
4
4
 
5
5
  def save_data(row):
6
- r_idx = row.name
7
- r_dict = row[row.ne(0)].to_dict()
6
+ i, c_idx = row.name, row[row.ne(0)].index
8
- with open(f'ans{r_idx}.txt', 'w') as ans:
7
+ with open(f'ans{i}.txt', 'w') as ans:
9
- for c_idx, val in r_dict.items():
8
+ for j in c_idx:
10
- ans.write(f'j={c_idx}\ni={r_idx}\n{val}\n\n')
9
+ ans.write(f'{j=}\n{i=}\n{row[j]}\n\n')
11
10
 
12
11
  df = pd.read_csv("sample.csv",header=None)
13
12
  df.apply(save_data, axis=1)
14
13
  ```
14
+

1

すこし改変。

2025/02/26 03:07

投稿

melian
melian

スコア21049

test CHANGED
@@ -4,11 +4,10 @@
4
4
 
5
5
  def save_data(row):
6
6
  r_idx = row.name
7
- r_dic = row.to_dict()
7
+ r_dict = row[row.ne(0)].to_dict()
8
8
  with open(f'ans{r_idx}.txt', 'w') as ans:
9
- for c_idx, val in r_dic.items():
9
+ for c_idx, val in r_dict.items():
10
- if val:
11
- ans.write(f'j={c_idx}\ni={r_idx}\n{val}\n\n')
10
+ ans.write(f'j={c_idx}\ni={r_idx}\n{val}\n\n')
12
11
 
13
12
  df = pd.read_csv("sample.csv",header=None)
14
13
  df.apply(save_data, axis=1)