teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

5

実施したいこと、現在の状況を更新しました。

2020/12/15 07:26

投稿

sssan
sssan

スコア10

title CHANGED
File without changes
body CHANGED
@@ -1,10 +1,7 @@
1
1
  **実施したいこと**
2
2
  フォルダ内に存在する複数のcsvファイルの任意の列を抽出して結合したいと考えています。
3
3
  コードの流れは以下の通りかと考えています。
4
- わからないこととしては、
5
- ・上記②における列1だけを0列目に配置するやりかた
4
+ ここで列1だけを0列目に配置するやりかたがわかりません。
6
- ・上記③で列タイトルをcsvファイル名にするやりかた
7
- になります。
8
5
 
9
6
  [作成したい結合後のcsvファイルの中身]
10
7
  |列1|sampleA|sampleB|sampleC|
@@ -16,28 +13,12 @@
16
13
 
17
14
  **現在の状況**
18
15
  下のようなcsvが現在出力されています。
19
- |sample|sample|sample|
16
+ |sampleA|sampleB|sampleC|
20
17
  |:--|:--:|--:|
21
18
  |1000|1000|1000|
22
19
  |2000|2000|2000|
23
20
  |3000|3000|3000|
24
21
 
25
- 列ラベル名をファイル名にするためにcsvfile_nameを取得しようとコード8行目を追加しましたが、
26
- 下記のようなエラーが発生しています。
27
-
28
- **現在のエラー**
29
- ```
30
- (py36) C:\Users\Username\Desktop\data>python test.py
31
- Traceback (most recent call last):
32
- File "test.py", line 8, in <module>
33
- csvfile_name = os.path.basename(csvfile_path)
34
- File "C:\Users\Username.conda\envs\py36\lib\ntpath.py", line 236, in basename
35
- return split(p)[1]
36
- File "C:\Users\Username.conda\envs\py36\lib\ntpath.py", line 205, in split
37
- p = os.fspath(p)
38
- TypeError: expected str, bytes or os.PathLike object, not list
39
- ```
40
-
41
22
  **補足情報**
42
23
  [フォルダの構成]
43
24
  data
@@ -63,7 +44,6 @@
63
44
  #dataフォルダ内の.csvファイル一覧を取得
64
45
  data_path = os.path.abspath(r"C:/Users/Username/Desktop/data")
65
46
  csvfile_path = glob.glob(data_path + '/*.csv')
66
- csvfile_name = os.path.basename(csvfile_name)
67
47
 
68
48
  #csvファイルの中身を追加していくリストを用意
69
49
  total_list = []
@@ -72,13 +52,12 @@
72
52
  #読み込むファイルのリストを走査
73
53
  for filename in csvfile_path:
74
54
  csvfile = pd.read_csv(filename)
75
- csvfile_drop = csvfile.drop(csvfile.columns[[0]], axis='columns')
55
+ csvfile_drop = csvfile.drop(csvfile.columns[[0, 1]], axis='columns')
76
- csvfile_drop = csvfile_drop.rename(columns={'列2':'sample'})
56
+ csvfile_drop = csvfile_drop.rename(columns={'列2':filename})
77
57
  total_list.append(csvfile_drop)
78
58
  df = pd.concat(total_list, axis=1)
79
59
 
80
60
  #total.csvとして出力
81
- print(df.head())
82
61
  df.to_csv("total.csv")
83
62
  ```
84
63
 

4

修正しました。

2020/12/15 07:26

投稿

sssan
sssan

スコア10

title CHANGED
File without changes
body CHANGED
@@ -14,7 +14,7 @@
14
14
  |3|3000|3000|3000|
15
15
 
16
16
 
17
- **現在の状況*
17
+ **現在の状況**
18
18
  下のようなcsvが現在出力されています。
19
19
  |sample|sample|sample|
20
20
  |:--|:--:|--:|

3

表が間違っていたため訂正しました。

2020/12/15 04:37

投稿

sssan
sssan

スコア10

title CHANGED
File without changes
body CHANGED
@@ -13,6 +13,7 @@
13
13
  |2|2000|2000|2000|
14
14
  |3|3000|3000|3000|
15
15
 
16
+
16
17
  **現在の状況*
17
18
  下のようなcsvが現在出力されています。
18
19
  |sample|sample|sample|
@@ -20,6 +21,7 @@
20
21
  |1000|1000|1000|
21
22
  |2000|2000|2000|
22
23
  |3000|3000|3000|
24
+
23
25
  列ラベル名をファイル名にするためにcsvfile_nameを取得しようとコード8行目を追加しましたが、
24
26
  下記のようなエラーが発生しています。
25
27
 

2

現在の状況、エラー、コードを更新しました。宜しくお願い致します。

2020/12/15 04:36

投稿

sssan
sssan

スコア10

title CHANGED
File without changes
body CHANGED
@@ -1,16 +1,41 @@
1
1
  **実施したいこと**
2
2
  フォルダ内に存在する複数のcsvファイルの任意の列を抽出して結合したいと考えています。
3
3
  コードの流れは以下の通りかと考えています。
4
- ①空のlist(total_list)を作成。
5
- ②total_listの0列目に列1を追加。
6
- ③total_listの1列目以降に各csvファイル内の列2を追加。この際に列タイトルはcsvファイル名にする。
7
- ④total.csvとして出力
8
-
9
- **現在分からないこと**
4
+ からないこととしては、
10
- ・下記コード実行時に18行目においてValueError: No objects to concatenateというエラーが発生するときの対処法
11
5
  ・上記②における列1だけを0列目に配置するやりかた
12
6
  ・上記③で列タイトルをcsvファイル名にするやりかた
7
+ になります。
13
8
 
9
+ [作成したい結合後のcsvファイルの中身]
10
+ |列1|sampleA|sampleB|sampleC|
11
+ |:--|:--:|:--:|--:|
12
+ |1|1000|1000|1000|
13
+ |2|2000|2000|2000|
14
+ |3|3000|3000|3000|
15
+
16
+ **現在の状況*
17
+ 下のようなcsvが現在出力されています。
18
+ |sample|sample|sample|
19
+ |:--|:--:|--:|
20
+ |1000|1000|1000|
21
+ |2000|2000|2000|
22
+ |3000|3000|3000|
23
+ 列ラベル名をファイル名にするためにcsvfile_nameを取得しようとコード8行目を追加しましたが、
24
+ 下記のようなエラーが発生しています。
25
+
26
+ **現在のエラー**
27
+ ```
28
+ (py36) C:\Users\Username\Desktop\data>python test.py
29
+ Traceback (most recent call last):
30
+ File "test.py", line 8, in <module>
31
+ csvfile_name = os.path.basename(csvfile_path)
32
+ File "C:\Users\Username.conda\envs\py36\lib\ntpath.py", line 236, in basename
33
+ return split(p)[1]
34
+ File "C:\Users\Username.conda\envs\py36\lib\ntpath.py", line 205, in split
35
+ p = os.fspath(p)
36
+ TypeError: expected str, bytes or os.PathLike object, not list
37
+ ```
38
+
14
39
  **補足情報**
15
40
  [フォルダの構成]
16
41
  data
@@ -27,13 +52,6 @@
27
52
  |2|2000|
28
53
  |3|3000|
29
54
 
30
- [作成したい結合後のcsvファイルの中身]
31
- |列1|sampleA|sampleB|sampleC|
32
- |:--|:--:|:--:|--:|
33
- |1|1000|1000|1000|
34
- |2|2000|2000|2000|
35
- |3|3000|3000|3000|
36
-
37
55
  [現在のコード]
38
56
  ```python
39
57
  import pandas as pd
@@ -41,21 +59,24 @@
41
59
  import glob
42
60
 
43
61
  #dataフォルダ内の.csvファイル一覧を取得
44
- csvfile_path = os.path.abspath(r"C:/Users/Username/Desktop/data")
62
+ data_path = os.path.abspath(r"C:/Users/Username/Desktop/data")
45
- csvfolder_path = os.path.dirname(csvfile_path)
46
- csvfilelist = glob.glob(csvfolder_path + '/*.csv')
63
+ csvfile_path = glob.glob(data_path + '/*.csv')
64
+ csvfile_name = os.path.basename(csvfile_name)
47
65
 
48
66
  #csvファイルの中身を追加していくリストを用意
49
67
  total_list = []
68
+ df = []
50
69
 
51
70
  #読み込むファイルのリストを走査
52
- for filename in csvfilelist:
71
+ for filename in csvfile_path:
72
+ csvfile = pd.read_csv(filename)
73
+ csvfile_drop = csvfile.drop(csvfile.columns[[0]], axis='columns')
74
+ csvfile_drop = csvfile_drop.rename(columns={'列2':'sample'})
53
- total_list.append(pd.read_csv(filename))
75
+ total_list.append(csvfile_drop)
76
+ df = pd.concat(total_list, axis=1)
54
77
 
55
- #リストを列方向に結合
56
- df = pd.concat(total_list, axis=1)
57
-
58
78
  #total.csvとして出力
79
+ print(df.head())
59
80
  df.to_csv("total.csv")
60
81
  ```
61
82
 

1

躓いている箇所を追加しました。

2020/12/15 04:34

投稿

sssan
sssan

スコア10

title CHANGED
File without changes
body CHANGED
@@ -7,6 +7,7 @@
7
7
  ④total.csvとして出力
8
8
 
9
9
  **現在分からないこと**
10
+ ・下記コード実行時に18行目においてValueError: No objects to concatenateというエラーが発生するときの対処法
10
11
  ・上記②における列1だけを0列目に配置するやりかた
11
12
  ・上記③で列タイトルをcsvファイル名にするやりかた
12
13
 
@@ -40,7 +41,7 @@
40
41
  import glob
41
42
 
42
43
  #dataフォルダ内の.csvファイル一覧を取得
43
- csvfile_path = os.path.abspath('C:/Users/Username/Desktop/data')
44
+ csvfile_path = os.path.abspath(r"C:/Users/Username/Desktop/data")
44
45
  csvfolder_path = os.path.dirname(csvfile_path)
45
46
  csvfilelist = glob.glob(csvfolder_path + '/*.csv')
46
47
 
@@ -49,7 +50,7 @@
49
50
 
50
51
  #読み込むファイルのリストを走査
51
52
  for filename in csvfilelist:
52
- li.append(pd.read_csv(filename))
53
+ total_list.append(pd.read_csv(filename))
53
54
 
54
55
  #リストを列方向に結合
55
56
  df = pd.concat(total_list, axis=1)
@@ -58,4 +59,4 @@
58
59
  df.to_csv("total.csv")
59
60
  ```
60
61
 
61
- 途中でつまづき中々先に進めない状況です。よろしくお願いします。
62
+ よろしくお願いします。