Как разделить столбец в фрейме данных, содержащем только цифры, на несколько столбцов в пандах - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть файл .dat, содержащий следующие данные:

0001100000101010100
110101000001111
101100011001110111
0111111010100
1010111111100011

Необходимо подсчитать количество нулей и единиц в каждой строке

Я пробовал с пандами.

  • Шаг-1: Считать файл данных
  • Шаг-2: Задать имя столбца
  • Шаг-3: Попытаться разбить значения на несколько столбцов.Но не удалось

df1=pd.read_csv('data.dat',header=None) df1.head()
                 0   1100000101010100

1   110101000001111
2   101100011001110111
3   111111010100
4   1010111111100011

df1.columns=['kirti']
df1.head()
        Kirti
_______________________
0   1100000101010100
1   110101000001111
2   101100011001110111
3   111111010100
4   1010111111100011

Мне нужно разбить фрейм данных на несколько столбцов в зависимости от 0 и 1 в каждой строке.

максимальное количество столбцов будет равнодля максимального количества нулей и единиц в любой из строк в фрейме данных.

Ответы [ 2 ]

0 голосов
/ 24 сентября 2019

Сначала создайте один столбец DataFrame по параметрам names и dtype=str для преобразования столбца в строки:

import pandas as pd

temp="""0001100000101010100
110101000001111
101100011001110111
0111111010100
1010111111100011"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename'
df = pd.read_csv(StringIO(temp), header=None, names=['kirti'], dtype=str)

print (df)
                 kirti
0  0001100000101010100
1      110101000001111
2   101100011001110111
3        0111111010100
4     1010111111100011

А затем создайте новый DataFrame путем преобразования значений в list s:

df = pd.DataFrame([list(x) for x in df['kirti']])
print (df)

   0  1  2  3  4  5  6  7  8  9 10 11 12    13    14    15    16    17    18
0  0  0  0  1  1  0  0  0  0  0  1  0  1     0     1     0     1     0     0
1  1  1  0  1  0  1  0  0  0  0  0  1  1     1     1  None  None  None  None
2  1  0  1  1  0  0  0  1  1  0  0  1  1     1     0     1     1     1  None
3  0  1  1  1  1  1  1  0  1  0  1  0  0  None  None  None  None  None  None
4  1  0  1  0  1  1  1  1  1  1  1  0  0     0     1     1  None  None  None
0 голосов
/ 24 сентября 2019

Если ваши данные находятся в списке строк, используйте метод count :

>> data = ["0001100000101010100", "110101000001111", "101100011001110111", "0111111010100", "1010111111100011"]
>> for i in data:
    print(i.count("0"))

13
7
7
5
5

Если ваши данные находятся в файле .dat с разделением пробелов, как вы их описали,тогда я бы порекомендовал загрузить ваши данные следующим образом:

data = pd.read_csv("data.dat", lineterminator=" ",dtype="str", header=None, names=["Kirti"])
    Kirti
0   0001100000101010100
1   110101000001111
2   101100011001110111
3   0111111010100
4   1010111111100011

Аргумент lineterminator гарантирует, что каждая запись находится в новой строке.Аргумент dtype гарантирует, что он читается как строка.В противном случае вы потеряете ведущие нули.

Если ваши данные находятся в DataFrame, вы можете использовать метод подсчета (вдохновленный здесь ):

>> data["Kirti"].str.count("0")
0    13
1     7
2     7
3     5
4     5
Name: Kirti, dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...