Python 那里';这是一种从字符串拆分创建行的方法
我需要你的帮助,比如: 我的输入(当我读取.csv文件时): df=pd.DataFrame(数据) 我的期望输出: 我不知道怎么解释得比这更好 我感谢你的帮助 谢谢Python 那里';这是一种从字符串拆分创建行的方法,python,pandas,Python,Pandas,我需要你的帮助,比如: 我的输入(当我读取.csv文件时): df=pd.DataFrame(数据) 我的期望输出: 我不知道怎么解释得比这更好 我感谢你的帮助 谢谢 data = {'A':['000','001','002','003'], 'B':['Name0','Name1','Name2','Name3'], 'C':[27,24,35,68], 'D':['@DI','@DI','@DI','@DI']} 这似乎是一项体力劳动,而不是技术劳动:) entry
data = {'A':['000','001','002','003'],
'B':['Name0','Name1','Name2','Name3'],
'C':[27,24,35,68],
'D':['@DI','@DI','@DI','@DI']}
这似乎是一项体力劳动,而不是技术劳动:)
entry_list=df.loc[2,'B'].split(“”)
df.loc[2,'B']=条目列表[0]
条目列表=条目列表[3:]
行=[]
对于范围内的i(0,len(条目列表),4):
原始行=条目列表[i:i+4]
行=[item.replace('@','')用于原始行[:-1]中的项]
行。追加(原始行[-1])
行。追加(行)
df=pd.concat([df,pd.DataFrame(line,columns=df.columns)])。重置索引(drop=True)
您可以基于“@”拆分字符串。然后您需要对它们进行分组(split函数将完成此操作)。最后,更改所需列的值并使用pd.explode获得结果
如果这是你需要的,我可以详细解释
df['split'] = df['B'].str.split('@')
def split(id,x):
if len(x) <= 1:
return np.NaN
a_list = [id]
b_list = []
c_list = []
d_list = []
for index,i in enumerate(x):
if index % 4 == 0:
b_list.append(i)
elif (index+1)%4 == 0:
a_list.append(i)
elif (index+2) % 4 ==0:
i = '@' + str(i)
d_list.append(i)
else:
c_list.append(i)
return [a_list,b_list,c_list,d_list]
df['split'] = df.apply(lambda x: split(x['A'],x['split']), axis=1)
# df[]=df['split'].str[1]
df.loc[(~df['split'].isnull()), 'A'] = df.loc[(~df['split'].isnull()), 'split'].str[0]
df.loc[(~df['split'].isnull()), 'B'] = df.loc[(~df['split'].isnull()), 'split'].str[1]
df.loc[(~df['split'].isnull()), 'C'] = df.loc[(~df['split'].isnull()), 'split'].str[2]
df.loc[(~df['split'].isnull()), 'D'] = df.loc[(~df['split'].isnull()), 'split'].str[3]
df = df.drop('split', axis=1)
df = df.apply(pd.Series.explode)
现在还不清楚你想做什么,不要发布图片,发布复制粘贴友好的表格。理想情况下,您应该发布创建该数据帧所需的代码,以便人们可以在本地创建它。您将有更多的机会获得帮助。感谢您的帮助,添加了数据帧编码。它工作良好,我需要它。谢谢你的回答!这也是一个很好的答案。谢谢你的帮助!它适用于遵循相同模式的任意数量的行。:)
df['split'] = df['B'].str.split('@')
def split(id,x):
if len(x) <= 1:
return np.NaN
a_list = [id]
b_list = []
c_list = []
d_list = []
for index,i in enumerate(x):
if index % 4 == 0:
b_list.append(i)
elif (index+1)%4 == 0:
a_list.append(i)
elif (index+2) % 4 ==0:
i = '@' + str(i)
d_list.append(i)
else:
c_list.append(i)
return [a_list,b_list,c_list,d_list]
df['split'] = df.apply(lambda x: split(x['A'],x['split']), axis=1)
# df[]=df['split'].str[1]
df.loc[(~df['split'].isnull()), 'A'] = df.loc[(~df['split'].isnull()), 'split'].str[0]
df.loc[(~df['split'].isnull()), 'B'] = df.loc[(~df['split'].isnull()), 'split'].str[1]
df.loc[(~df['split'].isnull()), 'C'] = df.loc[(~df['split'].isnull()), 'split'].str[2]
df.loc[(~df['split'].isnull()), 'D'] = df.loc[(~df['split'].isnull()), 'split'].str[3]
df = df.drop('split', axis=1)
df = df.apply(pd.Series.explode)
A B C D
0 000 Name0 27 @DI
1 001 Name1 24 @DI
2 002 Name2 35 @DI
2 003 Name3 68 @DI