如何将仅包含数字的数据框中的列拆分为 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。
- 第一步:读取数据文件
- 第 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 将数据框分成多列。
最大列数将等于数据框中任何行中的最大零和一数。
如果您的数据在字符串列表中,则使用 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
首先通过参数 names
和 dtype=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
然后通过将值转换为 list
s:
来创建新的 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
我有一个包含以下数据的 .dat 文件:
0001100000101010100
110101000001111
101100011001110111
0111111010100
1010111111100011
需要计算每行中 0 和 1 的数量
我试过 Pandas。
- 第一步:读取数据文件
- 第 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 将数据框分成多列。
最大列数将等于数据框中任何行中的最大零和一数。
如果您的数据在字符串列表中,则使用 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
首先通过参数 names
和 dtype=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
然后通过将值转换为 list
s:
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