修改从csv文件导入的panda Dataframe

aelbi1ox  于 2022-12-25  发布在  其他
关注(0)|答案(2)|浏览(132)

我有一个大的数据库从csv文件导入(使用pd.read_csv),下面是它在csv文件中的外观:

0       1       2
0   Milan   Draw    Juventus
1    2.47    3.24    3.03
2    2.45    3.23    3.06
0   Napoli  Draw    Parma
1    1.45    4.41    7.38
2    1.45    4.40    7.36
3    1.46    4.39    7.33
4    1.47    4.33    7.14
5    1.47    4.33    7.13
6    1.47    4.34    7.10
7    1.43    4.54    7.70
0   Fiorentina  Draw    Pisa
1    2.86    3.50    2.45
2    2.92    3.51    2.40
3    3.14    3.55    2.25
4    2.79    3.45    2.61

我需要 Dataframe 如下所示:

0         1         2       3       4
0   Milan   Juventus     2.47    3.24    3.03
1   Milan   Juventus     2.45    3.23    3.06
2   Napoli  Parma       1.45     4.41    7.38
3   Napoli  Parma       1.45     4.40    7.36
4   Napoli  Parma       1.46     4.39    7.33
5   Napoli  Parma       1.47     4.33    7.14
6   Napoli  Parma       1.47     4.33    7.13
7   Napoli  Parma       1.47     4.34    7.10
8   Napoli  Parma       1.43     4.54    7.70
9   Fiorentina  Pisa     2.86    3.50    2.45
10  Fiorentina  Pisa     2.92    3.51    2.40
11  Fiorentina  Pisa     3.14    3.55    2.25
12  Fiorentina  Pisa     2.79    3.45    2.61

这是非常容易做到这一点,在excel的公式,但我希望能够做到这一点,因为在python的csv文件是非常非常大,所以管理与Pandas是更快的方式,但我不知道是否有可能和如何做到这一点...谢谢!
按照建议操作df=pd.read_csv(r“G:\PLUTO\odds2.csv”,sep=",”)得到了这个

Unnamed: 0           0     1         2
0            0       Milan  Draw  Juventus
1            1        2.88  3.58      2.46
2            2        2.84  3.56       2.5
3            0      Napoli  Draw     Parma
4            1        2.44  3.35      3.08
5            2         2.5   3.3      3.03
6            3        2.48  3.31      3.05
7            4        2.49   3.3      3.05
8            5        2.46  3.38      3.02
9            6        2.49  3.37      2.99
10           7        2.48   3.4      2.98
11           0  Fiorentina  Draw      Pisa
12           1        3.05  3.23      2.53
13           2        3.04  3.24      2.53
14           3        3.22  3.25      2.41
15           4        3.23  3.24      2.41

两种方法都在read-csv中添加了“index_col=0”:

df = pd.read_csv(r"G:\PLUTO\odds.csv", sep=",", index_col=0)

感谢这两个人!

daolsyd0

daolsyd01#

下面是一个解决问题的方法:

df = pd.read_csv('eestlane.txt', sep=r"\s+")
df = df.reset_index().rename(columns={'index':'zero_for_names'})
df[['new1','new2']] = df.loc[df['zero_for_names'] == 0, ['0','1']].reindex(df.index, method='ffill')
df = df[df['zero_for_names'] != 0].drop(columns='zero_for_names').reset_index(drop = True)
df=df[['new1','new2','0','1','2']]
df.columns=[str(i) for i in range(len(df.columns))]

输出:

0     1     2     3     4
0        Milan  Draw  2.47  3.24  3.03
1        Milan  Draw  2.45  3.23  3.06
2       Napoli  Draw  1.45  4.41  7.38
3       Napoli  Draw  1.45  4.40  7.36
4       Napoli  Draw  1.46  4.39  7.33
5       Napoli  Draw  1.47  4.33  7.14
6       Napoli  Draw  1.47  4.33  7.13
7       Napoli  Draw  1.47  4.34  7.10
8       Napoli  Draw  1.43  4.54  7.70
9   Fiorentina  Draw  2.86  3.50  2.45
10  Fiorentina  Draw  2.92  3.51  2.40
11  Fiorentina  Draw  3.14  3.55  2.25
12  Fiorentina  Draw  2.79  3.45  2.61

说明:

  • 使用read_csv获取一个3列 Dataframe ,其索引仅包含名称为的行的0
  • 使用reset_index获取不含重复项的索引,使用rename将原始索引更改为名为zero_for_names的列
  • 创建两个新列new1, new2,并在zero_for_names上使用掩码以及reindex及其ffill方法arg,以使这些列成为问题中指定的目标输出的前两列
  • 使用zero_for_names过滤掉原始名称行,然后删除此列并使用reset_index获取没有间隔的新索引
  • 按所需顺序重新排列列
  • 更新df.columns以匹配问题中显示的所需列名(整数作为字符串)。
xyhw6mcr

xyhw6mcr2#

试试看:

def isfloat(x):
    try:
        float(x)
        return True
    except ValueError:
        return False

df = pd.read_csv("your_file.csv", sep=r"\s+")  # <-- you may to adjust sep= accordingly

# make sure the columns are of type int
df.columns = map(int, df.columns)

mask = df.applymap(isfloat)
x = df[mask].copy()
df[mask] = np.nan
df[[3, 4, 5]] = x

df[[0, 1, 2]] = df[[0, 1, 2]].ffill()
df = df.dropna().reset_index(drop=True).drop(columns=1)
df.columns = range(len(df.columns))

print(df)

图纸:

0         1     2     3     4
0        Milan  Juventus  2.47  3.24  3.03
1        Milan  Juventus  2.45  3.23  3.06
2       Napoli     Parma  1.45  4.41  7.38
3       Napoli     Parma  1.45  4.40  7.36
4       Napoli     Parma  1.46  4.39  7.33
5       Napoli     Parma  1.47  4.33  7.14
6       Napoli     Parma  1.47  4.33  7.13
7       Napoli     Parma  1.47  4.34  7.10
8       Napoli     Parma  1.43  4.54  7.70
9   Fiorentina      Pisa  2.86  3.50  2.45
10  Fiorentina      Pisa  2.92  3.51  2.40
11  Fiorentina      Pisa  3.14  3.55  2.25
12  Fiorentina      Pisa  2.79  3.45  2.61

相关问题