Почему панды выдавали «0,66-0,36», когда я пытался добавить две колонки? - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь выполнить простое суммирование с именем столбца Tangible Book Value и Earnings Per Share:

df['price_asset_EPS'] = (df["Tangible Book Value"]) + (df["Earnings Per Share"])

Однако результат не оценивает числа, а также плюс отсутствует, как показано ниже

0.66-0.36 
1.440.0

Что я пропустил между?

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Ваши столбцы обрабатываются не как числа, а как строки.Попробуйте запустить df.dtypes.Против каждого столбца у вас будет свой тип.Если вы не видите float или int, это означает, что эти столбцы, вероятно, были прочитаны как строки.

import pandas as pd
dff = pd.DataFrame([[1,'a'], [2, 'b']])
dff.dtypes
0     int64
1    object

Ниже я создал фрейм данных с числами внутри кавычек.Взгляните на dtypes.

dff = pd.DataFrame([['1','a'], ['2', 'b']])
dff.dtypes
0    object
1    object

Здесь вы видите, что столбец чисел не помечен int / float из-за кавычек.Теперь, если я возьму сумму первого столбца

dff.iloc[:,0].sum()
'12'

, я получу '12', что соответствует вашему.Чтобы преобразовать эти столбцы в числовые, посмотрите в pd.to_numeric

dff.iloc[:,0] = pd.to_numeric(dff.iloc[:,0], errors='ignore')
dff.iloc[:,0].sum()
3
0 голосов
/ 21 мая 2018

Похоже, что оба столбца являются строками (не с плавающей запятой):

0.66-0.36 
1.440.0

Посмотрите, как '+' в этих столбцах производила конкатенацию строк вместо добавления ?Он объединил «0,66» и «-0,36», затем «1,44» и «0,0».

Что касается , почему эти столбцы являются строками, а не числами с плавающей точкой, посмотрите на тип d, который pandas.read_csvдал им.Здесь много повторяющихся вопросов о том, как правильно указать dtypes для read_csv.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...