当スレに★Python以外のプログラミング言語での回答類を書くべからず★
派生言語はそれぞれ専スレがある(この板にあるとは限らない)ので、そっち池。
「Ruby」「Rails」「某言語では」「クソチョンw」をNGワード登録推奨。荒らしは、完全スルー放置が一番きらいです。
このスレッドは「お勉強」スレのほうには書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を、勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますので、お礼は Python の布教と初心者の救済をお願いします。
★エラーを解決したい場合★は、
表示されたエラーの全文(勝手に省略やスクショうp等の横着クソ行為禁止)と、
実行環境(Pythonのバージョン・OSとIDEの種類およびバージョン)をシッカリ書くこと。
Pythonの★ソースコードをそのまま5ちゃんに貼るとインデントが崩れてチヌ★
【【【複数の連続半角スペースはなにもなかったことにされる&タブは普通には入れられない】】】掲示板の仕様なので、
プログラム文は↓等の、いわゆるコードうp用サイトに貼ってこいください。
ttps://techiedelight.com/compiler/ Run Code機能あり。
ttp://ideone.com/ デフォ設定はC用のため、言語選択ボタン押下がピコ手間かも。
ttp://codepad.org/ ほぼ直感的に使える。Run codeボタンあり。
ttp://pastebin.com/ まずまずシンプル。
ttp://dpaste.com/ とてもシンプル。消えるまでの日数は十分長ーく指定のこと。
◇Python公式◇ http://www.python.org/
◇まとめwiki◇ ttp://python.rdy.jp/wiki.cgi
〇前スレ〇 【まず1嫁】くだすれPython(超初心者用) その56
http://mevius.5ch.net/test/read.cgi/tech/1640536690/
次スレたては >>985 あたりが挑戦する。
### END OF TEMPLATE ###
【まず1嫁】くだすれPython(超初心者用) その57
■ このスレッドは過去ログ倉庫に格納されています
2022/05/22(日) 22:25:08.74ID:/hGmbW/Z
2022/05/22(日) 22:37:38.56ID:jNpDIIz5
立て乙
3デフォルトの名無しさん
2022/05/24(火) 13:49:28.09ID:cQhl8P2i かわいい女の子に上目遣いで拗ねたように「いじわる」と言われると興奮するんです
4デフォルトの名無しさん
2022/06/05(日) 08:46:24.02ID:Sg+yaBaV pandasについての質問です。
"PRICE1","PRICE2","PRICE3","P1(%)","P2(%)","P3(%)"の順にデータが入ってるとします。
下記みたいな感じです。
@[0,0,2470,0,0,27] ○
A[0,0,1570,0,0,0] ☓
B[0,1580,1440,0,35,31] ○
C[0,1290,2878,0,0,31] ☓
D[2522,885,940,31,0,0] ☓
E[1527,1057,1639,28,5,31] ☓
F[1527,1457,1639,28,26,31] ○
○をつけたデータが残したいデータになります。
@AのようにPRICE>0のPRICEデータが1つの場合は、該当するP(%)データが25より大きい場合に残したいです。
BCのようにPRICE>0のPRICEデータが2つの場合は、該当するP(%)データがどちらも20より大きい場合に残したいです。
DEFのようにPRICE>0のPRICEデータが3つの場合は、該当するP(%)データがどちらも15より大きい場合に残したいです。
調べたら下記のような感じでやっていくことがわかったのですが、思うように整理できません。
df = pd.read_sql(sql=f'SELECT "PRICE1","PRICE2","PRICE3","P1(%)","P2(%)","P3(%)" FROM {schema}."{get_table}";', con=conn)
df = df[(df["PRICE1"]>0) | (df["PRICE2"]>0) | (df["PRICE3"]>0) | (df["P1(%)"]>25) | (df["P1(%)"]>25) | (df["P1(%)"]>25)]
df = [tuple(x) for x in df.values]
誰か助けてくだしあ
"PRICE1","PRICE2","PRICE3","P1(%)","P2(%)","P3(%)"の順にデータが入ってるとします。
下記みたいな感じです。
@[0,0,2470,0,0,27] ○
A[0,0,1570,0,0,0] ☓
B[0,1580,1440,0,35,31] ○
C[0,1290,2878,0,0,31] ☓
D[2522,885,940,31,0,0] ☓
E[1527,1057,1639,28,5,31] ☓
F[1527,1457,1639,28,26,31] ○
○をつけたデータが残したいデータになります。
@AのようにPRICE>0のPRICEデータが1つの場合は、該当するP(%)データが25より大きい場合に残したいです。
BCのようにPRICE>0のPRICEデータが2つの場合は、該当するP(%)データがどちらも20より大きい場合に残したいです。
DEFのようにPRICE>0のPRICEデータが3つの場合は、該当するP(%)データがどちらも15より大きい場合に残したいです。
調べたら下記のような感じでやっていくことがわかったのですが、思うように整理できません。
df = pd.read_sql(sql=f'SELECT "PRICE1","PRICE2","PRICE3","P1(%)","P2(%)","P3(%)" FROM {schema}."{get_table}";', con=conn)
df = df[(df["PRICE1"]>0) | (df["PRICE2"]>0) | (df["PRICE3"]>0) | (df["P1(%)"]>25) | (df["P1(%)"]>25) | (df["P1(%)"]>25)]
df = [tuple(x) for x in df.values]
誰か助けてくだしあ
5デフォルトの名無しさん
2022/06/05(日) 11:40:11.32ID:ocueg4o5 よーしらんが、論理回路の問題なんだろ?
なら一時的にif(if(if))みたいなネストの深いクソコード書いて、細かくデバック通すか
関数宣言をさぼらずに、(df["PRICE1"]>0)や(df["P1(%)"]>25)に分かりやすい関数名付けたほうがいいんじゃねえかな
なら一時的にif(if(if))みたいなネストの深いクソコード書いて、細かくデバック通すか
関数宣言をさぼらずに、(df["PRICE1"]>0)や(df["P1(%)"]>25)に分かりやすい関数名付けたほうがいいんじゃねえかな
2022/06/05(日) 12:23:41.62ID:NOI2DZIw
datetime.datetimeクラスの順序比較に手を加えたくなって、モジュールのソースをみたら_cmp()メソッドが比較の本体だったので
ttps://techiedelight.com/compiler/?zbRJ というコードで試したのですが、そもそも_cmp()が呼ばれません
これって、私は何を間違えているのでしょう? (なお、当初やりたかったこと自体は__eq__, __gt__, __ge__, __le__, __lt__, __ne__を直接オーバーライドすることで達成できました)
ttps://techiedelight.com/compiler/?zbRJ というコードで試したのですが、そもそも_cmp()が呼ばれません
これって、私は何を間違えているのでしょう? (なお、当初やりたかったこと自体は__eq__, __gt__, __ge__, __le__, __lt__, __ne__を直接オーバーライドすることで達成できました)
7デフォルトの名無しさん
2022/06/05(日) 12:40:05.08ID:u0j22vIZ 条件に合うものを残すより
条件に合わないものを消していく方が効率が良い
条件に合わないものを消していく方が効率が良い
8デフォルトの名無しさん
2022/06/05(日) 12:44:51.80ID:u0j22vIZ2022/06/05(日) 14:26:03.02ID:NOI2DZIw
>>8
お返事ありがとうございます
しかし、_cmpのアンダースコアは一つですし、AttributeErrorが発生したりせず単に呼ばれないだけ(比較自体は出来ているので親クラスの_cmp()が呼ばれているはず)です
マングル化に関するページをご紹介いただいた意味がよく分かりません
お返事ありがとうございます
しかし、_cmpのアンダースコアは一つですし、AttributeErrorが発生したりせず単に呼ばれないだけ(比較自体は出来ているので親クラスの_cmp()が呼ばれているはず)です
マングル化に関するページをご紹介いただいた意味がよく分かりません
10デフォルトの名無しさん
2022/06/05(日) 14:57:15.34ID:ocueg4o5 def もれそう(arg1, arg2, arg3, arg4, arg5, arg6):
__うんこ = [arg1, arg2, arg3]
__おもさ = [arg4, arg5, arg6]
__def 内容量(element):
____return len(list(filter(lambda x: x > 0, element)))
__def 耐久力(element, n):
____return list(filter(lambda x: x > n, element))
__if 内容量(うんこ) == 1:
____return 耐久力(おもさ, 25)
__elif 内容量(うんこ) == 2:
____return 耐久力(おもさ, 20)
__elif 内容量(うんこ) == 3:
____return 耐久力(おもさ, 15)
df = もれそう(茶色1,茶色2,茶色3,重量1, 重量2, 重量3)
pandasのことよー知らんから>>5で適当なこと書いちゃったけど、こういうことだよな
どっかで関数一覧に目を通すなりして、array関数とかcallback関数の使い方覚えたほうがいいぞ
__うんこ = [arg1, arg2, arg3]
__おもさ = [arg4, arg5, arg6]
__def 内容量(element):
____return len(list(filter(lambda x: x > 0, element)))
__def 耐久力(element, n):
____return list(filter(lambda x: x > n, element))
__if 内容量(うんこ) == 1:
____return 耐久力(おもさ, 25)
__elif 内容量(うんこ) == 2:
____return 耐久力(おもさ, 20)
__elif 内容量(うんこ) == 3:
____return 耐久力(おもさ, 15)
df = もれそう(茶色1,茶色2,茶色3,重量1, 重量2, 重量3)
pandasのことよー知らんから>>5で適当なこと書いちゃったけど、こういうことだよな
どっかで関数一覧に目を通すなりして、array関数とかcallback関数の使い方覚えたほうがいいぞ
2022/06/05(日) 15:01:54.57ID:v/p+BagL
>>4
sqlでの抽出は知らんけど、他の方法で抽出でけた
import pandas as pd
data=[
[0,0,2470,0,0,27],
[0,0,1570,0,0,0],
[0,1580,1440,0,35,31],
[0,1290,2878,0,0,31],
[2522,885,940,31,0,0],
[1527,1057,1639,28,5,31],
[1527,1457,1639,28,26,31]]
df = pd.DataFrame(data)
def check(row):
d = {1:25, 2:20, 3:15}
return all(i[1] > d[len(row)] for i in row)
# 各PRICEと各P(%)の組をzipで作って、その中からPRICEがゼロのものを削除したものをcheck関数でチェック
[check([k for k in j if k[0]>0]) for j in [list(zip(i[:3], i[3:])) for i in df.values.tolist()]]
[True, False, True, False, False, False, True] # ブールインデックス作成
df2 = df[_] # ブールインデックスで抽出
df2.values.tolist()
[[0, 0, 2470, 0, 0, 27], [0, 1580, 1440, 0, 35, 31], [1527, 1457, 1639, 28, 26, 31]]
sqlでの抽出は知らんけど、他の方法で抽出でけた
import pandas as pd
data=[
[0,0,2470,0,0,27],
[0,0,1570,0,0,0],
[0,1580,1440,0,35,31],
[0,1290,2878,0,0,31],
[2522,885,940,31,0,0],
[1527,1057,1639,28,5,31],
[1527,1457,1639,28,26,31]]
df = pd.DataFrame(data)
def check(row):
d = {1:25, 2:20, 3:15}
return all(i[1] > d[len(row)] for i in row)
# 各PRICEと各P(%)の組をzipで作って、その中からPRICEがゼロのものを削除したものをcheck関数でチェック
[check([k for k in j if k[0]>0]) for j in [list(zip(i[:3], i[3:])) for i in df.values.tolist()]]
[True, False, True, False, False, False, True] # ブールインデックス作成
df2 = df[_] # ブールインデックスで抽出
df2.values.tolist()
[[0, 0, 2470, 0, 0, 27], [0, 1580, 1440, 0, 35, 31], [1527, 1457, 1639, 28, 26, 31]]
2022/06/05(日) 15:18:41.40ID:v/p+BagL
プロンプトが無くて入力と出力が分かりにくかったので、プロンプト追加
>>>import pandas as pd
>>>data=[
・・・ [0,0,2470,0,0,27],
・・・ [0,0,1570,0,0,0],
・・・ [0,1580,1440,0,35,31],
・・・ [0,1290,2878,0,0,31],
・・・ [2522,885,940,31,0,0],
・・・ [1527,1057,1639,28,5,31],
・・・ [1527,1457,1639,28,26,31]]
>>>df = pd.DataFrame(data)
>>>def check(row):
・・・ d = {1:25, 2:20, 3:15}
・・・ return all(i[1] > d[len(row)] for i in row)
# 各PRICEと各P(%)の組をzipで作って、その中からPRICEがゼロのものを削除したものをcheck関数でチェック
>>>[check([k for k in j if k[0]>0]) for j in [list(zip(i[:3], i[3:])) for i in df.values.tolist()]]
[True, False, True, False, False, False, True] # ブールインデックス作成
>>>df2 = df[_] # ブールインデックスで抽出
>>>df2.values.tolist()
[[0, 0, 2470, 0, 0, 27], [0, 1580, 1440, 0, 35, 31], [1527, 1457, 1639, 28, 26, 31]]
>>>import pandas as pd
>>>data=[
・・・ [0,0,2470,0,0,27],
・・・ [0,0,1570,0,0,0],
・・・ [0,1580,1440,0,35,31],
・・・ [0,1290,2878,0,0,31],
・・・ [2522,885,940,31,0,0],
・・・ [1527,1057,1639,28,5,31],
・・・ [1527,1457,1639,28,26,31]]
>>>df = pd.DataFrame(data)
>>>def check(row):
・・・ d = {1:25, 2:20, 3:15}
・・・ return all(i[1] > d[len(row)] for i in row)
# 各PRICEと各P(%)の組をzipで作って、その中からPRICEがゼロのものを削除したものをcheck関数でチェック
>>>[check([k for k in j if k[0]>0]) for j in [list(zip(i[:3], i[3:])) for i in df.values.tolist()]]
[True, False, True, False, False, False, True] # ブールインデックス作成
>>>df2 = df[_] # ブールインデックスで抽出
>>>df2.values.tolist()
[[0, 0, 2470, 0, 0, 27], [0, 1580, 1440, 0, 35, 31], [1527, 1457, 1639, 28, 26, 31]]
2022/06/05(日) 15:20:27.82ID:joAjo/JZ
2022/06/05(日) 15:21:54.55ID:joAjo/JZ
15デフォルトの名無しさん
2022/06/05(日) 15:24:04.14ID:udiiYXiV2022/06/05(日) 15:33:26.33ID:NOI2DZIw
>>15
お返事ありがとうございます。親クラスのメソッドが呼び出されていることを実際にどう確認すればいいのか思いつけないレベルです(デバッガ? トレース?)
ただ単に、例外が送出されずに比較結果が表示されたので、何らかの比較するメソッドが呼ばれたのだろうと想像しただけです
例えば、foo <= datetime.datetime.max が評価されるとき
1) foo.__le__(datetime.datetime.max) が呼ばれる
2) fooには__le__メソッドが定義されていないので親クラスに遡って datetime.datetime.__le__(self=foo, other=datetime.datetime.max) が呼ばれる
3) ttps://github.com/python/cpython/blob/main/Lib/datetime.py の2110行 self._cmp(other) へ進む
ここでself=foo, other=datetime.datetime.max なので、 foo._cmp(other=datetime.datetime.max) と、 ttps://techiedelight.com/compiler/?zbRJ の4行目で定義したメソッドが呼ばれる
と考えていたのですが……継承に関する理解がどっかで間違っているのでしょうね
お返事ありがとうございます。親クラスのメソッドが呼び出されていることを実際にどう確認すればいいのか思いつけないレベルです(デバッガ? トレース?)
ただ単に、例外が送出されずに比較結果が表示されたので、何らかの比較するメソッドが呼ばれたのだろうと想像しただけです
例えば、foo <= datetime.datetime.max が評価されるとき
1) foo.__le__(datetime.datetime.max) が呼ばれる
2) fooには__le__メソッドが定義されていないので親クラスに遡って datetime.datetime.__le__(self=foo, other=datetime.datetime.max) が呼ばれる
3) ttps://github.com/python/cpython/blob/main/Lib/datetime.py の2110行 self._cmp(other) へ進む
ここでself=foo, other=datetime.datetime.max なので、 foo._cmp(other=datetime.datetime.max) と、 ttps://techiedelight.com/compiler/?zbRJ の4行目で定義したメソッドが呼ばれる
と考えていたのですが……継承に関する理解がどっかで間違っているのでしょうね
2022/06/05(日) 15:56:02.34ID:U0Dsg58D
俺も気になる。何で_cmp呼ばれんの?
18デフォルトの名無しさん
2022/06/05(日) 18:26:33.72ID:NPpCVuaP foo を造ってるのが now() なので
foo の型が datetime のままなんじゃね
foo の型が datetime のままなんじゃね
2022/06/05(日) 19:36:27.49ID:NPpCVuaP
print(super(DatetimeTest, self)._cmp)
↓
AttributeError: 'super' object has no attribute '_cmp'
↓
AttributeError: 'super' object has no attribute '_cmp'
20デフォルトの名無しさん
2022/06/05(日) 19:37:47.11ID:NPpCVuaP2022/06/05(日) 19:39:44.56ID:v/p+BagL
>>12
allの引数が空の場合(全てのPRICEがゼロの場合)にTrueを返すのでcheck関数修正
def check(row):
d = {1:25, 2:20, 3:15}
return all(i[1] > d[len(row)] for i in row) if row else False
allの引数が空の場合(全てのPRICEがゼロの場合)にTrueを返すのでcheck関数修正
def check(row):
d = {1:25, 2:20, 3:15}
return all(i[1] > d[len(row)] for i in row) if row else False
2022/06/05(日) 20:20:03.24ID:x6+Exssm
ジェネレーター式まで学習が進んだが
ちゃんと慣れないと突然でてきたとき「なんだこれ!?」ってなるとおもうわ
見やすくするためのものだからそんな複雑な構造で出てくることはないと思うが
ちゃんと慣れないと突然でてきたとき「なんだこれ!?」ってなるとおもうわ
見やすくするためのものだからそんな複雑な構造で出てくることはないと思うが
2022/06/05(日) 21:55:46.01ID:NOI2DZIw
ID:NPpCVuaPさん、ありがとうございます
> foo を造ってるのが now() なので
> foo の型が datetime のままなんじゃね
type(foo)はちゃんと"<class '__main__.DatetimeTest'>"になっていましたので、その線は無さそうです
で、試していただいた ttps://techiedelight.com/compiler/?Jmnq ですと、>>16で私が考えたとおりの動作をしているように見えますね
となると、datetime.datetimeとHogeで何が違うのか……ちょっと脳味噌が煮えてきたので、一旦専ブラを閉じて頭を冷やします
> foo を造ってるのが now() なので
> foo の型が datetime のままなんじゃね
type(foo)はちゃんと"<class '__main__.DatetimeTest'>"になっていましたので、その線は無さそうです
で、試していただいた ttps://techiedelight.com/compiler/?Jmnq ですと、>>16で私が考えたとおりの動作をしているように見えますね
となると、datetime.datetimeとHogeで何が違うのか……ちょっと脳味噌が煮えてきたので、一旦専ブラを閉じて頭を冷やします
2022/06/05(日) 23:10:11.97ID:v/p+BagL
2022/06/06(月) 08:54:18.93ID:9r9DwyjN
見えないのはわかったけどその挙動を実現するための言語仕様ってあるんだっけ?
26デフォルトの名無しさん
2022/06/06(月) 09:18:43.10ID:Ug3DHjCK27デフォルトの名無しさん
2022/06/06(月) 09:23:35.02ID:Ug3DHjCK まずやるべきことは >15 だろ
■ このスレッドは過去ログ倉庫に格納されています
