Python 如何处理熊猫中的复制粘贴表-重塑列向量
我有一个表是从a复制的,当粘贴到librecalc或excel时,该表占用一个单元格,当粘贴到notebook时,该表变成一个3507x1列。如果我使用pd.read_csv将其作为pandas数据帧导入,我会看到相同的3507x1列,现在我想将其重塑为它最初的501x7阵列 我原以为我可以重铸为一个numpy数组,按照我在numpy中熟悉的方式进行重塑,然后将其放回df中,但pandas的to_numpy方法似乎希望使用一个系列对象(而不是Dataframe),并尝试使用例如Python 如何处理熊猫中的复制粘贴表-重塑列向量,python,pandas,numpy,Python,Pandas,Numpy,我有一个表是从a复制的,当粘贴到librecalc或excel时,该表占用一个单元格,当粘贴到notebook时,该表变成一个3507x1列。如果我使用pd.read_csv将其作为pandas数据帧导入,我会看到相同的3507x1列,现在我想将其重塑为它最初的501x7阵列 我原以为我可以重铸为一个numpy数组,按照我在numpy中熟悉的方式进行重塑,然后将其放回df中,但pandas的to_numpy方法似乎希望使用一个系列对象(而不是Dataframe),并尝试使用例如 ser= pd.
ser= pd.Series.from_csv('billionaires')
导致标记化错误。有什么简单的方法可以做到这一点吗?也许我应该放弃这个方向,读html 简单的复制粘贴无法提供任何清晰的列分隔符,因此不可能轻松实现。
您只有空格,但空格也可能不在列值内(如名称或国家/地区),因此不可能指定给
DataFrame。请读取\u csv
列分隔符
但是,如果我将表复制粘贴到文件中,我会注意到规则性。如果你知道正则表达式,你可以尝试使用。此方法将正则表达式模式中的捕获组提取为数据帧的列。正则表达式应用于序列的每个元素/字符串 然后,您可以尝试找到一个正则表达式模式来捕获行的各个元素,并将它们拆分为单独的列
df = pd.read_csv('data.txt', names=["A"]) #no header in the file
ss = df['A']
rdf = ss.str.extract('(\d)\s+(.+)(\$[\d\.]+B)\s+([+-]\$[\d\.]+[BM])\s+([+-]\$[\d\.]+B)\s+([\w\s]+)\s+([\w\s]+)')
在这里,我试图为链接中的表编写一个正则表达式,第一个表的结果似乎很好
0 1 2 3 4 5 6
0 1 Jeff Bezos $121B +$231M -$3.94B United States Technology
1 3 Bernard Arnault $104B +$127M +$35.7B France Consumer
2 4 Warren Buffett $84.9B +$66.3M +$1.11B United States Diversified
3 5 Mark Zuckerberg $76.7B -$301M +$24.6B United States Technology
4 6 Amancio Ortega $66.5B +$303M +$7.85B Spain Retail
5 7 Larry Ellison $62.3B +$358M +$13.0B United States Technology
6 8 Carlos Slim $57.0B -$331M +$2.20B Mexico Diversified
7 9 Francoise Bettencourt Meyers $56.7B -$1.12B +$10.5B France Consumer
8 0 Larry Page $55.7B +$393M +$4.47B United States Technology
我使用了
DataFrame.read\u csv
来读取该文件,因为“Series.from\u csv”已被弃用。简单的复制粘贴不会为您提供任何清晰的列分隔符,因此不可能轻松执行。您只有空格,但空格也可能不在列值内(如名称或国家/地区),因此不可能指定给
DataFrame。请读取\u csv
列分隔符
但是,如果我将表复制粘贴到文件中,我会注意到规则性。如果你知道正则表达式,你可以尝试使用。此方法将正则表达式模式中的捕获组提取为数据帧的列。正则表达式应用于序列的每个元素/字符串 然后,您可以尝试找到一个正则表达式模式来捕获行的各个元素,并将它们拆分为单独的列
df = pd.read_csv('data.txt', names=["A"]) #no header in the file
ss = df['A']
rdf = ss.str.extract('(\d)\s+(.+)(\$[\d\.]+B)\s+([+-]\$[\d\.]+[BM])\s+([+-]\$[\d\.]+B)\s+([\w\s]+)\s+([\w\s]+)')
在这里,我试图为链接中的表编写一个正则表达式,第一个表的结果似乎很好
0 1 2 3 4 5 6
0 1 Jeff Bezos $121B +$231M -$3.94B United States Technology
1 3 Bernard Arnault $104B +$127M +$35.7B France Consumer
2 4 Warren Buffett $84.9B +$66.3M +$1.11B United States Diversified
3 5 Mark Zuckerberg $76.7B -$301M +$24.6B United States Technology
4 6 Amancio Ortega $66.5B +$303M +$7.85B Spain Retail
5 7 Larry Ellison $62.3B +$358M +$13.0B United States Technology
6 8 Carlos Slim $57.0B -$331M +$2.20B Mexico Diversified
7 9 Francoise Bettencourt Meyers $56.7B -$1.12B +$10.5B France Consumer
8 0 Larry Page $55.7B +$393M +$4.47B United States Technology
我使用了
DataFrame.read\u csv
来读取该文件,因为“Series.from\u csv”已被弃用。我发现转换为numpy数组比我想象的要容易得多-numpy asarray方法可以处理df(而且非常方便,它适用于一般对象,而不仅仅是数字)
我发现转换成numpy数组比我想象的要容易得多——numpy asarray方法可以处理df(而且非常方便,它适用于一般对象,而不仅仅是数字)
但它跳过了任何不符合该模式的内容,例如比尔·盖茨逃脱了正则表达式,允许他发射另一个windows版本。我需要所有的行进行进一步的工作。我没有尝试表中的所有行。如果有具有更复杂模式的行,则应相应地编辑正则表达式。imho上面概述的直接方法比尝试正则表达式并在其崩溃时修补它更容易,但它会跳过任何不符合该模式的内容,例如,比尔·盖茨已跳过正则表达式,允许他发出另一个windows版本。我需要所有的行进行进一步的工作。我没有尝试表中的所有行。如果有具有更复杂模式的行,则应相应地编辑正则表达式。imho上述直接方法比尝试正则表达式并在其中断时修补它更容易