如何将仅包含数字的数据框中的列拆分为 pandas 中的多列

How to split a column in a data frame containing only numbers into multiple columns in pandas

我有一个包含以下数据的 .dat 文件:

0001100000101010100
110101000001111
101100011001110111
0111111010100
1010111111100011

需要计算每行中 0 和 1 的数量

我试过 Pandas。


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 将数据框分成多列。

最大列数将等于数据框中任何行中的最大零和一数。

如果您的数据在字符串列表中,则使用 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

首先通过参数 namesdtype=str 创建一列 DataFrame 用于将列转换为字符串:

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

然后通过将值转换为 lists:

来创建新的 DataFrame
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