質問編集履歴
2
一部修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
Python Pandas利用時
|
1
|
+
Python Pandas利用したcsv読出時の不具合
|
test
CHANGED
@@ -1,16 +1,15 @@
|
|
1
1
|
|
2
2
|
|
3
3
|
### 前提・実現したいこと
|
4
|
-
tkinerを利用した検索画面を作成しております。
|
5
|
-
csv読込まで問題無く可能となり検索キーワードによる
|
6
|
-
検索も可能となっているのですが
|
7
|
-
検索後に表示される数字(文字列)の先頭0が消えてしまいます。
|
8
|
-
000001⇒1と表示 000001と表示したい
|
9
|
-
また、1部の数字には1⇒1.0となってしまう。
|
10
4
|
|
11
|
-
実際に行いたいことは
|
5
|
+
実際に行いたいことは黄色枠部分の表示ですが
|
6
|
+
ID部分は全6桁で1であれば000001と表示し
|
7
|
+
枝番は全3桁で1であれば001と表示したい
|
12
|
-
s
|
8
|
+
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-02-22/d35e780b-39d6-46eb-a259-b165fddc5029.png)
|
9
|
+
|
10
|
+
読み込んでいるCSVファイルは下記内容となっております。
|
13
|
-
|
11
|
+
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-02-22/b66fac90-37a6-41b1-a32f-8de069ece45d.png)
|
12
|
+
|
14
13
|
|
15
14
|
この内容についてご教授いただければ幸いです。
|
16
15
|
よろしくお願い致します。
|
@@ -18,6 +17,22 @@
|
|
18
17
|
### 該当のソースコード
|
19
18
|
|
20
19
|
```python
|
20
|
+
|
21
|
+
#EXCElファイルからCSVファイル作成
|
22
|
+
data = pd.read_excel(excel_search + '.xlsx')
|
23
|
+
data.to_csv(excel_search + '.csv', encoding="utf-8", index=False)
|
24
|
+
|
25
|
+
#検索用画面をサブウインドウで構築
|
26
|
+
class SubWindow(tkm.Frame):
|
27
|
+
def __init__(self,master,num):
|
28
|
+
super().__init__(master)
|
29
|
+
self.pack()
|
30
|
+
master.geometry("1000x400+400+300")
|
31
|
+
master.title("検索画面")
|
32
|
+
master.grab_set()
|
33
|
+
self.set_data()
|
34
|
+
self.create_widgets()
|
35
|
+
|
21
36
|
#csvファイル読込
|
22
37
|
def set_data(self):
|
23
38
|
self.data = pd.read_csv("/search.csv", dtype=object, encoding="utf-8", na_filter=False)
|
@@ -25,17 +40,61 @@
|
|
25
40
|
self.width_list = [10, 15, 30, 20, 20, 40, 10, 200, 50]
|
26
41
|
self.search_col = "検索キーワード"
|
27
42
|
|
43
|
+
def create_widgets(self):
|
44
|
+
self.pw_main = ttk.PanedWindow(self.master, orient="vertical")
|
45
|
+
self.pw_main.pack(expand=True, fill=tkm.BOTH, side="left")
|
46
|
+
self.pw_top = ttk.PanedWindow(self.pw_main, orient="horizontal", height=25)
|
47
|
+
self.pw_main.add(self.pw_top)
|
48
|
+
self.pw_bottom = ttk.PanedWindow(self.pw_main, orient="vertical")
|
49
|
+
self.pw_main.add(self.pw_bottom)
|
50
|
+
self.creat_input_frame(self.pw_top)
|
51
|
+
self.create_tree(self.pw_bottom)
|
52
|
+
|
53
|
+
def creat_input_frame(self, parent):
|
54
|
+
fm_input = ttk.Frame(parent, )
|
28
|
-
|
55
|
+
parent.add(fm_input)
|
56
|
+
lbl_keyword = ttk.Label(fm_input, text="キーワード", width=7)
|
57
|
+
lbl_keyword.grid(row=1, column=1, padx=2, pady=2)
|
58
|
+
self.keyword = tkm.StringVar()
|
59
|
+
ent_keyword = ttk.Entry(fm_input, justify="left", textvariable=self.keyword)
|
60
|
+
ent_keyword.grid(row=1, column=2, padx=2, pady=2)
|
61
|
+
ent_keyword.bind("<Return>", self.search)
|
62
|
+
|
63
|
+
def create_tree(self, parent):
|
64
|
+
self.result_text = tkm.StringVar()
|
65
|
+
lbl_result = ttk.Label(parent, textvariable=self.result_text)
|
66
|
+
parent.add(lbl_result)
|
67
|
+
self.tree = ttk.Treeview(parent)
|
68
|
+
self.tree["column"] = self.colname_list
|
69
|
+
self.tree["show"] = "headings"
|
70
|
+
self.tree.bind("<Double-1>", self.onDuble)
|
71
|
+
for i, (colname, width) in enumerate(zip(self.colname_list, self.width_list)):
|
72
|
+
self.tree.heading(i, text=colname)
|
73
|
+
self.tree.column(i, width=width)
|
74
|
+
parent.add(self.tree)
|
75
|
+
|
76
|
+
def search(self, event=None):
|
77
|
+
keyword = self.keyword.get()
|
78
|
+
result = self.data[self.data[self.search_col].str.contains(keyword, na=False)]
|
79
|
+
self.update_tree_by_search_result(result)
|
80
|
+
|
29
|
-
|
81
|
+
def update_tree_by_search_result(self, result):
|
82
|
+
self.tree.delete(*self.tree.get_children())
|
83
|
+
self.result_text.set(f"検索結果:{len(result)}")
|
84
|
+
for _, row in result.iterrows():
|
30
|
-
|
85
|
+
self.tree.insert("", "end", values=row[self.colname_list].to_list())
|
86
|
+
|
87
|
+
def onDuble(self, event):
|
88
|
+
for item in self.tree.selection():
|
89
|
+
print(self.tree.item(item)["values"])
|
31
90
|
|
32
91
|
|
33
92
|
```
|
34
|
-
|
35
93
|
### 試したこと
|
36
|
-
dtypeをstrに変更したが変わらない。
|
37
94
|
作成されたCSVファイルを一度開き、名前付けて保存【CSV UTF-8】で再度作成した場合には
|
38
|
-
上記内容が解消されました
|
95
|
+
上記内容が解消されましたが
|
96
|
+
pythonでExcelファイルからCSV吐き出しし読込動作となると上記結果となってしまいます。
|
39
97
|
|
40
98
|
|
41
99
|
|
100
|
+
|
1
test
CHANGED
File without changes
|
test
CHANGED
@@ -27,7 +27,7 @@
|
|
27
27
|
|
28
28
|
#CSVファイル作成
|
29
29
|
data = pd.read_excel(excel_search + '.xlsx')
|
30
|
-
data.to_csv(excel_search + '.csv', encoding="utf-8", index=False)
|
30
|
+
data.to_csv(excel_search + '.csv', encoding="utf-8", index=False)
|
31
31
|
|
32
32
|
|
33
33
|
```
|
@@ -37,7 +37,5 @@
|
|
37
37
|
作成されたCSVファイルを一度開き、名前付けて保存【CSV UTF-8】で再度作成した場合には
|
38
38
|
上記内容が解消されました。
|
39
39
|
|
40
|
-
### 補足情報(FW/ツールのバージョンなど)
|
41
40
|
|
42
|
-
ここにより詳細な情報を記載してください。
|
43
41
|
|