我有一个从 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
我需要数据框如下所示:
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)
谢谢两位!
最佳答案
这里有一种方法可以满足您的问题:
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 列数据框,其索引仅包含具有名称的行的 0 - 使用
reset_index
获取没有重复项的索引,并使用rename
将原始索引更改为名为zero_for_names
的列 - 创建两个新列
new1, new2
并在zero_for_names
上使用屏蔽以及reindex
及其ffill
方法arg 将这些列准备为问题中指定的目标输出的前两列 - 使用
zero_for_names
过滤掉原始名称行,然后删除此列并使用reset_index
获取没有间隙的新索引 - 将列重新排列为所需的顺序
- 更新
df.columns
以匹配问题中显示的所需列名称(整数作为字符串)。
关于python - 修改从csv文件导入的pandas数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74902783/