Python панды показывают повторные значения - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь получить данные из txt-файла с помощью pandas.read_csv, но он не показывает повторяющиеся (одинаковые) значения в файле, например, у меня есть 2043 в строке, но он показывает это один раз не в каждой строке.

Пример моего файла

enter image description here

Результирующий набор

enter image description here

Все круги, которые я нарисовал, тоже должны быть 2043, но они пусты.

Мой код:

import pandas as pd

df= pd.read_csv('samplefile.txt', sep='\t', header=None,
               names = ["234",  "235",  "236"]

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Слово предупреждения с MultiIndex, так как я был укушен этим вчера и потратил впустую время, пытаясь решить проблему несуществующей проблемы.

Если один из ваших уровней индекса имеет тип float64, то вы можете обнаружить, что индексы не показаны полностью. У меня был фрейм данных, который у меня был df.groupby().describe(), а переменная, на которой я выполнял groupby(), изначально была длинной int, в какой-то момент она была преобразована в float, и при печати этот индекс был округлен. Было несколько значений, очень близких друг к другу, поэтому при печати показало , что groupby() обнаружил несколько уровней второго индекса.

Это не очень понятно, поэтому вот иллюстративный пример ...

import numpy as np
import pandas as pd

index = np.random.uniform(low=89908893132829,
                          high=89908893132929,
                          size=(50,))
df = pd.DataFrame({'obs': np.arange(100)},
                  index=np.append(index, index)).sort_index()
df.index.name = 'index1'
df['index2'] = [1, 2] * 50
df.reset_index(inplace=True)
df.set_index(['index1', 'index2'], inplace=True)

Посмотрите на фрейм данных, и кажется, что существует только один уровень индекса1 ...

df.head(10)
                     obs
index1       index2     
8.990889e+13 1         4
             2        54
             1        61
             2        11
             1        89
             2        39
             1        65
             2        15
             1        60
             2        10

groupby(['index1', 'index2']).describe() и выглядит как будто существует только один уровень index1 ...

summary = df.groupby(['index1', 'index2']).describe()
summary.head()
                      obs                                        
                    count  mean std   min   25%   50%   75%   max
index1       index2                                              
8.990889e+13 1        1.0   4.0 NaN   4.0   4.0   4.0   4.0   4.0
             2        1.0  54.0 NaN  54.0  54.0  54.0  54.0  54.0
             1        1.0  61.0 NaN  61.0  61.0  61.0  61.0  61.0
             2        1.0  11.0 NaN  11.0  11.0  11.0  11.0  11.0
             1        1.0  89.0 NaN  89.0  89.0  89.0  89.0  89.0

Но если вы посмотрите на фактические значения index1 в любом из них, вы увидите, что существует несколько уникальных значений. В исходном фрейме данных ...

df.index.get_level_values('index1')

Float64Index([89908893132833.12, 89908893132833.12, 89908893132834.08,
              89908893132834.08, 89908893132835.05, 89908893132835.05,
               89908893132836.3,  89908893132836.3, 89908893132837.95,
              89908893132837.95,  89908893132838.1,  89908893132838.1,
               89908893132838.6,  89908893132838.6, 89908893132841.89,
              89908893132841.89, 89908893132841.95, 89908893132841.95,
              89908893132845.81, 89908893132845.81, 89908893132845.83,
              89908893132845.83, 89908893132845.88, 89908893132845.88,
              89908893132846.02, 89908893132846.02,  89908893132847.2,
               89908893132847.2, 89908893132847.67, 89908893132847.67,
               89908893132848.5,  89908893132848.5,  89908893132848.5,
               89908893132848.5, 89908893132855.17, 89908893132855.17,
              89908893132855.45, 89908893132855.45, 89908893132864.62,
              89908893132864.62, 89908893132868.61, 89908893132868.61,
              89908893132873.16, 89908893132873.16,  89908893132875.6,
               89908893132875.6, 89908893132875.83, 89908893132875.83,
              89908893132878.73, 89908893132878.73,  89908893132879.9,
               89908893132879.9, 89908893132880.67, 89908893132880.67,
              89908893132880.69, 89908893132880.69, 89908893132881.31,
              89908893132881.31, 89908893132881.69, 89908893132881.69,
              89908893132884.45, 89908893132884.45, 89908893132887.27,
              89908893132887.27, 89908893132887.83, 89908893132887.83,
               89908893132892.8,  89908893132892.8, 89908893132894.34,
              89908893132894.34,  89908893132894.5,  89908893132894.5,
              89908893132901.88, 89908893132901.88, 89908893132903.27,
              89908893132903.27, 89908893132904.53, 89908893132904.53,
              89908893132909.27, 89908893132909.27, 89908893132910.38,
              89908893132910.38, 89908893132911.86, 89908893132911.86,
               89908893132913.4,  89908893132913.4, 89908893132915.73,
              89908893132915.73, 89908893132916.06, 89908893132916.06,
              89908893132922.48, 89908893132922.48, 89908893132923.44,
              89908893132923.44, 89908893132924.66, 89908893132924.66,
              89908893132925.14, 89908893132925.14, 89908893132928.28,
              89908893132928.28],
             dtype='float64', name='index1')

... и в обобщенном фрейме данных ...

summary.index.get_level_values('index1')

Float64Index([89908893132833.12, 89908893132833.12, 89908893132834.08,
              89908893132834.08, 89908893132835.05, 89908893132835.05,
               89908893132836.3,  89908893132836.3, 89908893132837.95,
              89908893132837.95,  89908893132838.1,  89908893132838.1,
               89908893132838.6,  89908893132838.6, 89908893132841.89,
              89908893132841.89, 89908893132841.95, 89908893132841.95,
              89908893132845.81, 89908893132845.81, 89908893132845.83,
              89908893132845.83, 89908893132845.88, 89908893132845.88,
              89908893132846.02, 89908893132846.02,  89908893132847.2,
               89908893132847.2, 89908893132847.67, 89908893132847.67,
               89908893132848.5,  89908893132848.5, 89908893132855.17,
              89908893132855.17, 89908893132855.45, 89908893132855.45,
              89908893132864.62, 89908893132864.62, 89908893132868.61,
              89908893132868.61, 89908893132873.16, 89908893132873.16,
               89908893132875.6,  89908893132875.6, 89908893132875.83,
              89908893132875.83, 89908893132878.73, 89908893132878.73,
               89908893132879.9,  89908893132879.9, 89908893132880.67,
              89908893132880.67, 89908893132880.69, 89908893132880.69,
              89908893132881.31, 89908893132881.31, 89908893132881.69,
              89908893132881.69, 89908893132884.45, 89908893132884.45,
              89908893132887.27, 89908893132887.27, 89908893132887.83,
              89908893132887.83,  89908893132892.8,  89908893132892.8,
              89908893132894.34, 89908893132894.34,  89908893132894.5,
               89908893132894.5, 89908893132901.88, 89908893132901.88,
              89908893132903.27, 89908893132903.27, 89908893132904.53,
              89908893132904.53, 89908893132909.27, 89908893132909.27,
              89908893132910.38, 89908893132910.38, 89908893132911.86,
              89908893132911.86,  89908893132913.4,  89908893132913.4,
              89908893132915.73, 89908893132915.73, 89908893132916.06,
              89908893132916.06, 89908893132922.48, 89908893132922.48,
              89908893132923.44, 89908893132923.44, 89908893132924.66,
              89908893132924.66, 89908893132925.14, 89908893132925.14,
              89908893132928.28, 89908893132928.28],
             dtype='float64', name='index1')

Я потратил время на то, чтобы почесать голову, размышляя, почему мой groupby([ index1 , index2 ) дал только один уровень index1!

0 голосов
/ 18 января 2019

Вы получаете MultiIndex, поэтому значения первого уровня отображаются не только.

Вы можете преобразовать MultiIndex в столбцы с помощью reset_index:

df = df.reset_index()

Или укажите каждый столбец в именах параметров, чтобы избежать MultiIndex:

df = pd.read_csv('samplefile.txt', sep='\t', names = ["one","two","next", "234", "235", "236"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...