从MD文件读取到熊猫数据框

时间:2020-05-06 15:41:23

标签: python pandas

我正在使用this数据存储库做一个项目,对于每个足球赛季,在包含比赛数据的CSV文件的顶部,都有一个额外的自述文件,该文件具有最终结果。这是某种形式的表结构,我想将其读入Pandas数据框。我已经尝试过“ read_csv”和“ read_table”,但是我不确定正在使用什么定界符,以及是否可能使用多索引... MD文件如下:

                                        - Home -          - Away -            - Total -
                                 Pld   W  D  L   F:A     W  D  L   F:A      F:A   +/-  Pts
 1. Club Brugge                   34  14  2  1  45:12   11  4  2  38:18    83:30  +53   81
 2. RSC Anderlecht                34  14  1  2  44:14    8  4  5  39:23    83:37  +46   71
 3. Germinal Beerschot            34  12  3  2  34:11    3  5  9  19:26    53:37  +16   53
 4. RWD Molenbeek                 34   9  6  2  24:9     4  8  5  15:20    39:29  +10   53
 5. K Lierse SK                   34   8  4  5  30:21    6  6  5  24:24    54:45   +9   52
 6. Standard Liège                34   9  7  1  28:15    4  5  8  23:31    51:46   +5   51
 7. Sporting Charleroi            34   8  7  2  37:21    5  4  8  22:32    59:53   +6   50
 8. Cercle Brugge                 34   7  5  5  27:23    6  5  6  24:24    51:47   +4   49
 9. KFC Lommel SK                 34   7  6  4  20:15    7  0 10  20:30    40:45   -5   48
10. SC Eendracht Aalst            34   8  6  3  37:21    4  4  9  18:29    55:50   +5   46
11. KV Mechelen                   34   8  4  5  20:16    4  4  9  20:30    40:46   -6   44
12. KRC Harelbeke                 34   8  1  8  26:26    5  3  9  14:22    40:48   -8   43
13. Royal Antwerp FC              34   7  4  6  26:23    4  5  8  12:23    38:46   -8   42
14. KAA Gent                      34   8  2  7  21:22    2  9  6  18:27    39:49  -10   41
15. Sint-Truidense VV             34   7  4  6  29:28    4  3 10  13:32    42:60  -18   40
16. RFC Seraing                   34   5  4  8  18:24    3  1 13  17:51    35:75  -40   29
17. KSK Beveren                   34   4  7  6  24:25    2  2 13  14:32    38:57  -19   27
18. SV Zulte Waregem              34   3  4 10  18:36    1  5 11  12:34    30:70  -40   21

Pld =匹配项; W =比赛获胜; D =比赛结果; L =输掉比赛; F =目标; A =进球数; +/- =目标差;分=点

如何最好地阅读此文件?干杯!

2 个答案:

答案 0 :(得分:1)

此文件未格式化为CSV格式(可以同时使用','和';'分隔符。 在您的情况下,您只能使用空格,因此该方法将是针对每一行按空格字符将其分割,摆脱空条目并按索引获取它们。

f = open("your.csv", 'r')
for l in f.readlines():
    vals = [l for l in l.split(' ') if l]
    index = vals[0]
    name = vals[1]
    goals_fa = tuple(vals[6].split(':'))
    ...
    # fill dataframe
f.close()

答案 1 :(得分:1)

此文件的格式不是特定的-应该是人类可读的,而不是机器可读的。因此,您可能首先需要自己进行一些转换。

一种简单的方法:

lines = text.split('\n')
df = pd.DataFrame([re.split(r'\s+', line[34:]) for line in lines])

您可以直接命名列:

df.columns = [['home_pld', 'home_w', 'home_d', 'home_l', 'home_fa', 
    'home_pld', 'home_w', 'home_d', 'home_l', 'home_fa', 
    'total_fa', 'total_plusminus', 'total_points']]

并添加俱乐部名称:

df['club'] = [line[4:34].strip() for line in lines]