質問編集履歴

3

内容の明確化

2019/06/17 14:11

投稿

Danrussia
Danrussia

スコア44

test CHANGED
File without changes
test CHANGED
@@ -112,6 +112,14 @@
112
112
 
113
113
  ![イメージ説明](c3108a93a078c21e5733a4eea460b28b.png)
114
114
 
115
+
116
+
117
+ ### tiitoiさんにご教授して頂いたコードを動かした時の結果
118
+
119
+ ![イメージ説明](94f825b3941dcabec610eb3445eafc5b.png)
120
+
121
+
122
+
115
123
  ### 解決したい事
116
124
 
117
125
  関数(これ自体がしっかりと動くものかは別として)からはエラーコードが吐き出されない

2

問題点が変わったので、書き直しました。

2019/06/17 14:11

投稿

Danrussia
Danrussia

スコア44

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,8 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- Pythonにおいて、ファイルの形式(拡張子)をif文で判別して、読み込み方を変える関数を作成しています。
3
+ Pythonにおいて、ファイルの形式(拡張子)をif文で判別して、読み込み方を変える関数を作成しています。(文法的には正しくても、意図した通りに動くかは別として)関数は作成できたのですが、
4
+
5
+ 実際に関数を呼び出してファイルを読み込む段階で上手く動きません。
4
6
 
5
7
 
6
8
 
@@ -26,6 +28,8 @@
26
28
 
27
29
  pd.read_table(df1, encoding="shift-jis")
28
30
 
31
+
32
+
29
33
  ```
30
34
 
31
35
  ### 該当のデータコード② ファイルの拡張子と指定した拡張子の演算記号がis(2019/06/17 22:00以降)
@@ -44,27 +48,89 @@
44
48
 
45
49
  pd.read_table(df1, encoding="shift-jis")
46
50
 
51
+
52
+
53
+ os.chdir("C://Users//For Programming//Documents//Python Scripts3")
54
+
55
+ df1 = pd.read_csv("AAA.csv")
56
+
57
+
58
+
59
+ identification_filetype(df1)
60
+
47
61
  ```
48
62
 
49
63
  ### 発生している問題・エラーメッセージ(2019/06/17 22:00以降)
50
64
 
51
65
  ```
52
66
 
67
+ ---------------------------------------------------------------------------
68
+
69
+ TypeError Traceback (most recent call last)
70
+
71
+ <ipython-input-31-7e076d001f76> in <module>()
72
+
73
+ ----> 1 identification_filetype(df1)
74
+
75
+
76
+
77
+ <ipython-input-29-c1e0414762b5> in identification_filetype(df1)
78
+
79
+ 1 def identification_filetype (df1):
80
+
81
+ ----> 2 path, ext =os.path.splitext(df1)
82
+
83
+ 3 if ext is".csv":
84
+
85
+ 4 pd.read_csv(df1, encoding="shift-jis")
86
+
87
+ 5 elif ext is".txt":
88
+
89
+
90
+
91
+ ~\Anaconda3\lib\ntpath.py in splitext(p)
92
+
93
+ 200
94
+
53
- 特にエラーコードは発生していない。
95
+ 201 def splitext(p):
96
+
97
+ --> 202 p = os.fspath(p)
98
+
99
+ 203 if isinstance(p, bytes):
100
+
101
+ 204 return genericpath._splitext(p, b'\', b'/', b'.')
102
+
103
+
104
+
105
+ TypeError: expected str, bytes or os.PathLike object, not DataFrame
54
106
 
55
107
  ```
56
108
 
109
+ ### 想定しているデータフレーム
110
+
111
+ ![イメージ説明](83350031a6920698243cdfa4fa4ee6f2.png)
112
+
113
+ ![イメージ説明](c3108a93a078c21e5733a4eea460b28b.png)
114
+
57
115
  ### 解決したい事
58
116
 
59
- 恐ら文法的な間違いない思うのですが、エラーコードから察するに「os.path.splitext(df1)」の部分で
117
+ 関数(これ自体がしっかりと動ものかして)からはエラーコードが吐き出されない
60
118
 
61
- df1から上手くファイルの拡張子を受け取れていような感じするのですが、解決策が分かりせん
119
+ のですが、関数を使ってファイルを読み込む時に上記エラーコード発生しした
62
-
63
- 完全な解決策でなくても構わないので、大まかにでも解決への道筋を示していただけるだけ
64
-
65
- でも、とても助かります。宜しくお願い致します。
66
120
 
67
121
 
122
+
123
+ 「path, ext =os.path.splitext(df1)」に対して、
124
+
125
+ 「xpected str, bytes or os.PathLike object, not DataFrame」
126
+
127
+
128
+
129
+ というエラーコードが出ているのを見るとos.pathで読み込んでいるものがファイルではなく
130
+
131
+ DataFrameになってしまっている感じがするので、ファイル形式で読みめれば(多分)
132
+
133
+ 解決できるのではと思うのですが、方法が分からないです。
68
134
 
69
135
 
70
136
 

1

もう一度コードを実装したらなぜかエラーコードが出なくなったので書き直しました。

2019/06/17 13:25

投稿

Danrussia
Danrussia

スコア44

test CHANGED
File without changes
test CHANGED
@@ -2,71 +2,11 @@
2
2
 
3
3
  Pythonにおいて、ファイルの形式(拡張子)をif文で判別して、読み込み方を変える関数を作成しています。
4
4
 
5
- ### 発生している問題・エラーメッセージ
6
-
7
- ```
8
-
9
- ValueError Traceback (most recent call last)
10
-
11
- <ipython-input-38-4134440177b2> in <module>()
12
-
13
- 4 pd.read_csv(df1, encoding="shift-jis")
14
-
15
- 5 elif ext==".txt":
16
-
17
- ----> 6 pd.read_table(df1, encoding="shift-jis")
18
5
 
19
6
 
20
7
 
21
- ~\Anaconda3\lib\site-packages\pandas\io\parsers.py in parser_f(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, escapechar, comment, encoding, dialect, tupleize_cols, error_bad_lines, warn_bad_lines, skipfooter, doublequote, delim_whitespace, low_memory, memory_map, float_precision)
22
8
 
23
- 676 skip_blank_lines=skip_blank_lines)
24
-
25
- 677
26
-
27
- --> 678 return _read(filepath_or_buffer, kwds)
28
-
29
- 679
30
-
31
- 680 parser_f.__name__ = name
32
-
33
-
34
-
35
- ~\Anaconda3\lib\site-packages\pandas\io\parsers.py in _read(filepath_or_buffer, kwds)
36
-
37
- 422 compression = _infer_compression(filepath_or_buffer, compression)
9
+ ### 該当のデータコード① ファイルの拡張子と指定した拡張子の演算記号が==(2019/06/17 22:00以降)
38
-
39
- 423 filepath_or_buffer, _, compression, should_close = get_filepath_or_buffer(
40
-
41
- --> 424 filepath_or_buffer, encoding, compression)
42
-
43
- 425 kwds['compression'] = compression
44
-
45
- 426
46
-
47
-
48
-
49
- ~\Anaconda3\lib\site-packages\pandas\io\common.py in get_filepath_or_buffer(filepath_or_buffer, encoding, compression, mode)
50
-
51
- 216 if not is_file_like(filepath_or_buffer):
52
-
53
- 217 msg = "Invalid file path or buffer object type: {_type}"
54
-
55
- --> 218 raise ValueError(msg.format(_type=type(filepath_or_buffer)))
56
-
57
- 219
58
-
59
- 220 return filepath_or_buffer, None, compression, False
60
-
61
-
62
-
63
- ValueError: Invalid file path or buffer object type: <class 'pandas.core.frame.DataFrame'>
64
-
65
- ```
66
-
67
-
68
-
69
- ### 該当のソースコード
70
10
 
71
11
  ```Python3
72
12
 
@@ -88,7 +28,31 @@
88
28
 
89
29
  ```
90
30
 
31
+ ### 該当のデータコード② ファイルの拡張子と指定した拡張子の演算記号がis(2019/06/17 22:00以降)
91
32
 
33
+ ```Python3
34
+
35
+ def identification_filetype (df1):
36
+
37
+ path, ext =os.path.splitext(df1)
38
+
39
+ if ext is".csv":
40
+
41
+ pd.read_csv(df1, encoding="shift-jis")
42
+
43
+ elif ext is".txt":
44
+
45
+ pd.read_table(df1, encoding="shift-jis")
46
+
47
+ ```
48
+
49
+ ### 発生している問題・エラーメッセージ(2019/06/17 22:00以降)
50
+
51
+ ```
52
+
53
+ 特にエラーコードは発生していない。
54
+
55
+ ```
92
56
 
93
57
  ### 解決したい事
94
58
 
@@ -96,9 +60,11 @@
96
60
 
97
61
  df1から上手くファイルの拡張子を受け取れてないような感じがするのですが、解決策が分かりません。
98
62
 
99
- 完全な解決策でなくても構わないので、大まかにでも解決への道筋を示していただけるだけでも、
63
+ 完全な解決策でなくても構わないので、大まかにでも解決への道筋を示していただけるだけ
100
64
 
101
- とても助かります。宜しくお願い致します。
65
+ でも、とても助かります。宜しくお願い致します。
66
+
67
+
102
68
 
103
69
 
104
70