質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

573閲覧

あるデータの数値に+1またはー1された値で比較し入力した数値を判別

giagany

総合スコア3

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/01/29 02:07

編集2023/01/29 04:47

実現したいこと

もともとあるデータの数値に+1またはー1された値で比較し入力した数値を判別させたい。

発生している問題・エラーメッセージ

The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

該当のソースコード

import csv import numpy as np import pandas as pd df = pd.read_csv('data.csv',encoding='cp932') pd.set_option('display.max_rows', 150) pd.set_option('display.max_columns', None) pd.set_option('display.max_colwidth', None) pd.read_csv('data.csv',encoding='cp932') row_1st = df.iloc[0,0] num = int(input()) if row_1st - 1 <= num <= row_1st + 1: print('9以上かつ11以下です。') else: print('9以上かつ11以下ではありません。')

試したこと

data.csv

列1列2列3
101112
202122
303132

実行結果

row_1st = df.iloc[0,0]

#10

num = int(input())
if row_1st - 1 <= num <= row_1st + 1:
print('9以上かつ11以下です。')
else:
print('9以上かつ11以下ではありません。')

num = 10のとき、
'9以上かつ11以下です。'

num = 5のとき、
'9以上かつ11以下ではありません。'

(+1またはー1は例です)

row_1st - 1のように+またはーされた値で数値を判別させたい。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2023/01/29 02:15

row_1th = df.iloc[[0],[0]] => row_1st = df.iloc[0,0] ※ 細かい話ですが、first は 1st と表記する方がよいでしょう。
giagany

2023/01/29 02:26 編集

細かいご指摘ありがとうございます。 プログラミングの内容分かるでしょうか
melian

2023/01/29 02:30

あとは、 print('9以上かつ11以下です。') を f-string を使って、 print(f'{row_1st-1}以上かつ{row_1st+1}以下です。') などと書き直すとよいかと。(他の print 文も同様)
giagany

2023/01/29 02:59

row_1st = df.iloc[[0],[0]]についてですが row_1st = df.iloc[[0,1,2],[0]] print(np.mean(row_1st)) のようにしたいですが、実行結果が 列1 20 というように「列1」まで表示され、これをなくす方法はありますか?
melian

2023/01/29 03:03

row_1st = df.iloc[[0,1,2],0] でしょう。
giagany

2023/01/29 03:19

では、 20 21 と表示させるには、row_1st = df.iloc[[0,1,2],[0,1]]で合ってますか? これだと列1が出てしまいます。
melian

2023/01/29 03:27

その場合は以下で。 row_1st = df.iloc[[0,1,2],[0,1]].values
giagany

2023/01/29 03:30

申し訳ないですが、それだと 20 21 ではなく 20.5 になってしまいますが
melian

2023/01/29 03:33

print(df.iloc[[0,1,2],[0,1]].values) の実行結果は以下になります。 array([[10, 11], [20, 21], [30, 31]]) これは期待している結果ではないのでしょうか?
giagany

2023/01/29 03:50

度々申し訳ありませんでした。言葉が足りていませんでした。 print(df.iloc[[0,1,2],[0,1]].values)はこちらのプログラムが間違っていたもので問題ありません。 ただ、欲しい結果が、array([[10, 11], [20, 21], [30, 31]])ではなく [{(10+20+30)/3}, {(11+21+31)/3}] ↓ [20,21] です。 本来は新しく質問すべきところここに書かせてしまい申し訳ありません
melian

2023/01/29 03:57

その場合は、 df.iloc[[0,1,2],[0,1]].mean().values としますが、numpy.ndarray ではなくリストで欲しい場合は、 df.iloc[[0,1,2],[0,1]].mean().to_list() とします。
giagany

2023/01/29 04:01

できました。本当に感謝申し上げます。
giagany

2023/01/29 04:14

すいません。if文の最後 : が抜けてため上記のエラーが出ていましたが直したところ invalid literal for int() with base 10 というエラーになりました。
melian

2023/01/29 04:17

input() の部分で数字以外の文字を入力したのではないでしょうか。
giagany

2023/01/29 04:22

input()に直したところ The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). というエラーになりました。
melian

2023/01/29 04:28

状況が分からないのですが、input というのは以下の部分の input のことです。 num = int(input('数値を入力してください:')) プログラムを実行すると「数値を入力して下さい:」と表示されて入力待ちになるはずです。そこで、例えば abc10 などと入力すれば invalid literal for int() with base 10 と表示されるはずです。
giagany

2023/01/29 04:34

状況を上手く伝えれず申し訳ありません。こちらでも色々編集しておりそのたびエラーや状況が一転し安定していない状態です。 また、分からなくなってしまったらコメントします。
giagany

2023/01/29 04:54

状況を整理してきました。 abc10と入力すると invalid literal for int() with base 10というエラーになりました。 10と入力すると The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() というエラーになり、'〇〇以上かつ□□以下ではありません。'のようになりませんでした。 if row_1st - 1 <= num <= row_1st + 1:に問題があるようで
melian

2023/01/29 04:57

row_1st = df.iloc[0,0] となっている部分を書き換えたのではありませんか?
giagany

2023/01/29 05:05 編集

そこが間違っていました。ありがとうございます。 大変お世話になりました。
guest

回答1

0

ベストアンサー

invalid syntax

についてはif文の最後の:が抜けているのが原因です。

投稿2023/01/29 02:30

can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問