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

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

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

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

Q&A

解決済

1回答

543閲覧

pythonによるデータ補正について

Kaika

総合スコア8

Python

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

0グッド

0クリップ

投稿2021/07/17 13:15

編集2021/07/17 13:55

##実現したい事
1,2列目でNaNになっているデータを同じ行の3,4列目のデータを入れて補正する処理をしたいです
エラーが出てしまい、次に進むことができません。
※ファイル内容は下の通りです
ファイル名: data.csv

6行4列
列1 列2 列3 列4
2021 NaN 2021 11
NaN 6 2021 6
2021 NaN 2021 4
2021 NaN 2021 8
2021 9 2021 9
NaN NaN 2021 11

##発生している問題・エラーメッセージ
エラーメッセージは次の通りです
下のコード5行目のcsvを読み込む時点でデータ型がなぜかobject型になり、そこからNaNの検索や補正ができない状態になります。

AttributeError Traceback (most recent call last)
<ipython-input-4-c80cdb7e5e7a> in <module>
4
5 data = pd.read_csv('data.csv',dtype=str,encoding="cp932")
----> 6 data = data.iloc[i,0].astype('str')
7 for i in range(1,len(data)):
8 if np.isnan(data.iloc[i,0]):

AttributeError: 'str' object has no attribute 'astype'

##コード・試したこと
コードは次の通りです
1:import os
2:import pandas as pd
3:import numpy as np
4:
5:data = pd.read_csv('data.csv',dtype=str,encoding="cp932")
6:data = data.iloc[i,0].astype('str')
7:for i in range(1,len(data)):
8: if np.isnan(data.iloc[i,0]):
9: print(f'年度の{i}行目補正しました')
10: data.iloc[i,0] = data.iloc[i,3]
11:for i in range(1,len(data)):
12: if np.isnan(data.iloc[i,1]):
13: print(f'参加月の{i}行目補正しました')
14: data.iloc[i,1] = data.iloc[i,4]
15:data

##補足情報(FW/ツールのバージョンなど)
使用ツール
python3(jupyter.lab)
VScode
です

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

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

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

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

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

guest

回答1

0

ベストアンサー

問題点1

7行4列のデータについて、
2列目でNaNになっているデータを同じ行の5列目のデータを入れて補正する処理
をしたいのですね。5列目はどこからでてくるのでしょうか?

問題点2

Jupyterでない方法で実行すると

python

16:data = data.iloc[i,0].astype('str')

のところで、iが未定義でエラーになるでしょう。
それをどう修正しようと思いますか。

回答がありませんが、要するにこの行は不要だと暗に言ってみただけです。

  • 下のコード5行目のcsvを読み込む時点でデータ型がなぜかobject型になり、

データに含まれる6と9が全角だからです。

質問にあるループ処理を悩むよりは、pandasで欠損値NaNを除外(削除)・置換(穴埋め)・抽出のような方法を使った方がわかりやすいでしょう。

python

1>>> print(data) 21234 30 2021.0 NaN 2021 11 41 NaN 6.0 2021 6 52 2021.0 NaN 2021 4 63 2021.0 NaN 2021 8 74 2021.0 9.0 2021 9 85 NaN NaN 2021 11 9>>> 10>>> data['列1'] = data['列1'].fillna(data['列3']).astype(int) 11>>> data['列2'] = data['列2'].fillna(data['列4']).astype(int) 12>>> 13>>> print(data) 141234 150 2021 11 2021 11 161 2021 6 2021 6 172 2021 4 2021 4 183 2021 8 2021 8 194 2021 9 2021 9 205 2021 11 2021 11 21

投稿2021/07/17 13:35

編集2021/07/17 14:33
ppaul

総合スコア24666

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

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

Kaika

2021/07/17 13:58

ppaulさま  ご指摘ありがとうございます。  重複した質問は削除し、こちらで質問内容修正しました。  もう一度ご覧頂き、ご指導もらえるとうれしいです。よろしくお願いいたします。
Kaika

2021/07/17 14:25

6:data = data.iloc[i,0].astype('str') iが未定義でエラーになるでしょう。 それをどう修正しようと思いますか。 >for i in range(1,len(data)): for j in range(1,4): data = data.iloc[i,j].astype('str') で修正します。
Kaika

2021/07/17 14:43

ppaulさま  ありがとうございました。質問の件、無事解決しました。 これからもご支援よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問