Как различить тип данных столбца в пандах, если все столбцы назначены объекту - PullRequest
0 голосов
/ 14 марта 2019

Я импортирую текстовый файл с 5 столбцами данных (разных типов данных).Почему-то после того, как данные импортированы и очищены.Им всем назначен тип Object в пандах, поэтому нет возможности различить столбцы.

Моя цель - различать столбцы по типу данных и отбрасывать столбцы, которые содержат определенный тип данных.Код и результаты следующие:

import pandas as pd
import re

data = pd.read_csv('SevAvail2.txt', sep="\t", header=None)
df = pd.DataFrame(data)


header = df.column = df.iloc[0]
header = df.reindex(df.index.drop(0))

# print(header)
df = header
df = df.loc[:, df.isnull().mean() < .95]

#count remaining column length and print list with count
col_length = len(df.columns)
print(col_length)
header_label = []
for i in range(0, col_length):
    header_label.append(i)

#reset headers to (0 : n)
df.columns = header_label

# print(df)
for column in df.columns[0:]:
    print(df[column])

Результирующие столбцы:

1     AB21313BF
2     AB21313GF
3     AB21313SF
4     AB21313CF
5     AB21313KF
Name: 0, dtype: object

1          BABA TECH
2              LALA TECH
3              NDMP
4          IND CORP
5          CAMP 
Name: 1, dtype: object

1       9.2500
2      15.7500
3       7.0000
4      19.7500
5      33.5000
Name: 2, dtype: object

1         -65
2        1.75
3           0
4          -4
5        .75)
Name: 3, dtype: object

1      4,501,561.00 
2      3,145,531.00 
3      1,454,303.00 
4      1,420,949.00 
5      1,095,575.00 
Name: 4, dtype: object

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Если это должно быть число, а python распознает как объект, это означает, что в поле есть нечисловые символы.Вы можете просмотреть исходный файл вручную или указать столбцы, которые, по вашему мнению, должны быть числовыми.Кроме того, вы можете принудительно импортировать тип данных, назначив его в операторе чтения

pr.read_csv('filename', sep='/t', dtype= {'Field1':int, 'Field2':str... }

и т. Д. ...

0 голосов
/ 14 марта 2019

Вы можете использовать pandas infer_dtype api, чтобы вывести тип данных столбцов.

Пример:

import pandas as pd
df = pd.DataFrame({'c1': [1,2], 'c2': [1.0,2.0], 'c3': ["a","b"]})
for c in df.columns:
    print (pd.lib.infer_dtype(df[c]))

Выход:

integer floating string

Документация: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.api.types.infer_dtype.html

Числа, хранящиеся в виде строк:

Когда число содержит «,» и хранится в виде строки (например, «4,501,561.00»), один из способов перебора -

import pandas as pd
df = pd.DataFrame({'c1': ['4,501,561.00','501,561.00'], 'c2': [1.0,2.0], 'c3': ["a","b"]})
for c in df.columns:
    if pd.lib.infer_dtype(df[c]) == 'string':
        # Or is it a number stored as string 
        try:
            df[c].str.replace(',','').astype(float)
            print ("floating")
        except:
            print ("string")
    else:
        print (pd.lib.infer_dtype(df[c]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...