Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
分离包含字母和数字的浮点数、整数、负数和字符串以及';python中的s_Python_String_Pandas_Numpy_Loops - Fatal编程技术网

分离包含字母和数字的浮点数、整数、负数和字符串以及';python中的s

分离包含字母和数字的浮点数、整数、负数和字符串以及';python中的s,python,string,pandas,numpy,loops,Python,String,Pandas,Numpy,Loops,我目前有一个我迭代的字符串列表 string1 = 'CRUC1AL 34 6 5 0 23 75.6 11 89.6 3 1.39 robiin 40 15 8 2 26 78.0 14 89.5 4 1.36 Surreal 31 14 6 2 25 68.3 6 79.8 2 1.17 MiGHTYMAX 24 8 7 2 26 78.0 -2 57.5 -2 1.02 Thomas 25 17 10 3 28 70.7 -3 77.8 -2 0.95' string2 = 'Lucky

我目前有一个我迭代的字符串列表

string1 = 'CRUC1AL 34 6 5 0 23 75.6 11 89.6 3 1.39 robiin 40 15 8 2 26 78.0 14 89.5 4 1.36 Surreal 31 14 6 2 25 68.3 6 79.8 2 1.17 MiGHTYMAX 24 8 7 2 26 78.0 -2 57.5 -2 1.02 Thomas 25 17 10 3 28 70.7 -3 77.8 -2 0.95'
string2 = 'Lucky 27 6 8 4 27 68.3 0 71.0 4 1.01 kiR 27 18 6 0 36 58.5 -9 77.6 1 0.92 kwezz 29 11 6 2 32 53.7 -3 77.2 -1 0.91 scott 20 6 5 2 26 56.1 -6 50.0 -2 0.75 cleMeNz0 25 15 5 3 33 48.8 -8 71.9 -7 0.74'
我将所有的“,”替换为“”,这样我就可以遍历它们了。现在我需要能够把名字放进1个列表和数字中。这些名称包含字母、数字、标点符号和破折号

player_names1 = []
player_names2 = []
team1_list = []
team2_list = []
for i in string1:
    if i.isalpha() or i.endswith('.') or i.isupper():
        player_names1.append(i)
    elif not i.isalpha() and not i.endswith('.') and not i.isupper():
        team1_list.append(i)

for i in string2:
    if i.isalpha() or i.endswith('.') or i.isupper():
        player_names2.append(i)
    elif not i.isalpha() and not i.endswith('.') and not i.isupper():
        team2_list.append(i)
我考虑过使用索引或查找函数,但我不想为了实现这一点而对if语句进行新的not序列。。 这种方法可以将一个名称改为一个。在上一个字符串中,将CRUC1AL添加到名称列表中,但现在有一个字符串末尾有一个0,它试图将其添加到我的统计列表中。我也试过

if not i.isdigit() and not i.startswith('-'):
    player_names1.append(i)
    print(i)
    #= CRUC1AL 75.6 89.6 1.39
else:
    team1_list.append(i)

但这将浮动和玩家名称附加在一起。我已经尝试过搜索修复程序,但是没有找到任何可以分离浮点值的特定内容。。。总之,我需要能够将浮点数、整数和负数从可能有-、和字母的名称中分离出来。有什么建议吗?生成找到的错误的完整代码。。另外,任何关于更优雅地编写我的代码的提示都会很好

您可以拆分空间并附加到相应的列表中

player_names1 = []
team1_list = []
for idx, el in  enumerate(string1.split()):
   if idx % 11 == 0:
      player_names1.append(el)
   else:
      team1_list.append(el)
另一种方法可能是使用结果构建数据框架

>>> pd.DataFrame(np.array(string1.split()).reshape(5,11))
           0   1   2   3  4   5     6   7     8   9    10
0    CRUC1AL  34   6   5  0  23  75.6  11  89.6   3  1.39
1     robiin  40  15   8  2  26  78.0  14  89.5   4  1.36
2    Surreal  31  14   6  2  25  68.3   6  79.8   2  1.17
3  MiGHTYMAX  24   8   7  2  26  78.0  -2  57.5  -2  1.02
4     Thomas  25  17  10  3  28  70.7  -3  77.8  -2  0.95

您的数据似乎遵循以下模式:

[name][int][int][int][int][int][float][int][float][int][int][float]

假设您的目标是分割数据,也就是说,您这样做并非纯粹为了学习,我们可以利用这种模式

像@abc一样,我选择使用Pandas,我认为这对于此类数据是有意义的,这意味着我们不必手动将每个值转换为适当的类型

将熊猫作为pd导入
团队1_str='Crucal 34 6 5 0 23 75.6 11 89.6 3 1.39机器人40 15 8 2 26 78.0 14 89.5 4 1.36超现实31 14 6 2 25 68.3 6 79.8 2 1.17 MiGHTYMAX 24 8 7 2 26 78.0-2 57.5-2 1.02托马斯25 17 10 3 28 70.7-3 77.8-2 0.95'
团队2_str='Lucky 276 8 4 27 68.3 0 71.0 4 1.01 kiR 27 18 6 0 36 58.5-977.6 1 0.92 kwezz 29 11 6 2 32 53.7-3 77.2-1 0.91 scott 20 6 5 2 26 56.1-6 50.0-2 0.75 cleMeNz0 25 15 3 33 48.8-8 71.9-7 0.74'
team_1_split=team_1_str.split()
team_2_split=team_2_str.split()
团队1_数据=(团队1_分割[i:i+11]用于范围内的i(0,len(团队1_分割),11))
团队2_数据=(团队2_分割[i:i+11]用于范围内的i(0,len(团队2_分割),11))
df_1=pd.DataFrame(数据=团队_1_数据)
df_2=pd.DataFrame(数据=团队_2_数据)
打印(df_1,end='\n\n')
打印(df_2)
输出:

0112345678910
0 CRUC1AL 34 6 5 0 23 75.6 11 89.6 3 1.39
1机器人40 15 8 2 26 78.0 14 89.5 4 1.36
2超现实31 14 6 2 25 68.3 6 79.8 2 1.17
3 MiGHTYMAX 248722678.0-257.5-21.02
托马斯25171032870.7-377.8-20.95
0   1   2  3  4   5     6   7     8   9    10
0幸运2766842768.3071.041.01
1基尔27 18 6 0 36 58.5-9 77.6 1 0.92
2 kwezz 29 11 6 2 32 53.7-3 77.2-1 0.91
斯科特20652266.1-650.0-20.75
4 cleMeNz0 25 15 5 3 33 48.8-8 71.9-7 0.74

您的解释不清楚。熊猫与你的问题有什么关系?请显示预期输出的示例。这些数据来自哪里?您是否注意到它遵循一种模式?@DYZ 94,50,20,6,78388.4,16386.6,10,6.07,16是一个示例输出。我获取这些值,可以用每个玩家的名字和统计数据制作一个字典,然后我可以获取他们的统计数据的总和,并将它们写入CSV文件进行分析。我遇到的问题的数据来自“AttributeError:“list”对象没有属性“split”。我猜这是把字符串当作一个列表对象,这样它们就不能被拆分了。我将尝试使用dataframe样式。string1是一个字符串(您在示例中发布的字符串),而不是一个列表。我编辑了我的代码以与您的代码对齐,现在我收到了ValueError:无法将字符串转换为float:“CRUC1AL”,因为稍后在代码中我将创建一个单独的元素列表。但是仅仅是将它直接转换成数据帧就行了,这样我就能够操纵我想要如何使用统计数据。非常感谢。尝试此操作后出现错误。。TypeError:“生成器”对象不可下标。。我将尝试将明显的列表转换为字符串,然后将其运行到代码中,看看是否可以得到相同的结果。等我有机会再发回来。