识别 GitHub 数据集中的多列问题
Issue with recognizing multiple columns in GitHub data set
我正在尝试读取从 GitHub 获得的数据集,但我遇到了列问题。数据集中有不需要的信息,所以我删掉了。当我用我需要的信息创建一个新的 DataFrame 时,系统并没有识别出所有的列。相反,它将所有内容都视为一列。有谁知道如何解决这个问题,以便我可以制作 DataFrame 输出列 'r'、'G(r)'、'd_r'、'd_Gr'?下面是我的代码和输出。
import pandas as pd
url = 'https://github.com/jagar2/Summer_2020_MAT-395-495_Scientific-Data-Analysis-and-Computing/blob/master/homeworks/HW1/ALDalumina.gr?raw=true'
df = pd.read_table(url, skiprows=0)
# from here, the desired data is within rows [123:]
print(df.loc[123:] # this shows desired data
# make new DataFrame
df_new = df[123:]
# output
History written: Thu Apr 12 20:03:37 2018
123 #L r G(r) d_r d_Gr
124 1.000000e-002 8.021935e-002 -7.539822e-...
125 2.000000e-002 1.585036e-001 -1.507964e-...
126 3.000000e-002 2.329669e-001 -2.261947e-...
127 4.000000e-002 3.018208e-001 -3.015929e-...
... ...
2119 1.996000e+001 -4.029393e-002 -1.504949e+...
2120 1.997000e+001 -4.024680e-002 -1.505703e+...
2121 1.998000e+001 -3.973462e-002 -1.506456e+...
2122 1.999000e+001 -3.877427e-002 -1.507210e+...
2123 2.000000e+001 -3.739258e-002 -1.507964e+...
[2001 rows x 1 columns]
如何让 python 识别这些列?感谢任何帮助。
数据被解释为包含一个稍长的列 'History written: Thu Apr 12 20:03:37 2018'
。
基本上,您需要将单列拆分为多列。您可以使用下面的代码来获得您所描述的结果。创建df_new
后,您可以尝试:
df_final = df_new[1:].assign(r = df_new['History written: Thu Apr 12 20:03:37 2018'].str.split('\s{3,}').map(lambda x: x[0]),
G_r = df_new['History written: Thu Apr 12 20:03:37 2018'].str.split('\s{3,}').map(lambda x: x[1]),
d_r = df_new['History written: Thu Apr 12 20:03:37 2018'].str.split('\s{3,}').map(lambda x: x[2]),
d_Gr = df_new['History written: Thu Apr 12 20:03:37 2018'].str.split('\s{3,}').map(lambda x: x[3])
)[['r','G_r','d_r','d_Gr']]
这将为您提供一个包含所需 4 列的新数据框 df_final
。您可以使用 df_final.rename(columns = your_column_name_dict)
重命名您认为合适的列
df_final = df_final.rename(columns = {'G_r':'G(r)'})
我正在尝试读取从 GitHub 获得的数据集,但我遇到了列问题。数据集中有不需要的信息,所以我删掉了。当我用我需要的信息创建一个新的 DataFrame 时,系统并没有识别出所有的列。相反,它将所有内容都视为一列。有谁知道如何解决这个问题,以便我可以制作 DataFrame 输出列 'r'、'G(r)'、'd_r'、'd_Gr'?下面是我的代码和输出。
import pandas as pd
url = 'https://github.com/jagar2/Summer_2020_MAT-395-495_Scientific-Data-Analysis-and-Computing/blob/master/homeworks/HW1/ALDalumina.gr?raw=true'
df = pd.read_table(url, skiprows=0)
# from here, the desired data is within rows [123:]
print(df.loc[123:] # this shows desired data
# make new DataFrame
df_new = df[123:]
# output
History written: Thu Apr 12 20:03:37 2018
123 #L r G(r) d_r d_Gr
124 1.000000e-002 8.021935e-002 -7.539822e-...
125 2.000000e-002 1.585036e-001 -1.507964e-...
126 3.000000e-002 2.329669e-001 -2.261947e-...
127 4.000000e-002 3.018208e-001 -3.015929e-...
... ...
2119 1.996000e+001 -4.029393e-002 -1.504949e+...
2120 1.997000e+001 -4.024680e-002 -1.505703e+...
2121 1.998000e+001 -3.973462e-002 -1.506456e+...
2122 1.999000e+001 -3.877427e-002 -1.507210e+...
2123 2.000000e+001 -3.739258e-002 -1.507964e+...
[2001 rows x 1 columns]
如何让 python 识别这些列?感谢任何帮助。
数据被解释为包含一个稍长的列 'History written: Thu Apr 12 20:03:37 2018'
。
基本上,您需要将单列拆分为多列。您可以使用下面的代码来获得您所描述的结果。创建df_new
后,您可以尝试:
df_final = df_new[1:].assign(r = df_new['History written: Thu Apr 12 20:03:37 2018'].str.split('\s{3,}').map(lambda x: x[0]),
G_r = df_new['History written: Thu Apr 12 20:03:37 2018'].str.split('\s{3,}').map(lambda x: x[1]),
d_r = df_new['History written: Thu Apr 12 20:03:37 2018'].str.split('\s{3,}').map(lambda x: x[2]),
d_Gr = df_new['History written: Thu Apr 12 20:03:37 2018'].str.split('\s{3,}').map(lambda x: x[3])
)[['r','G_r','d_r','d_Gr']]
这将为您提供一个包含所需 4 列的新数据框 df_final
。您可以使用 df_final.rename(columns = your_column_name_dict)
df_final = df_final.rename(columns = {'G_r':'G(r)'})