整理了 25 个 Pandas 实用技巧
![](https://filescdn.proginn.com/6d8c49fc08bb5f820932f2567d0c655f/69db42d789c1dd60f3d5b683b23c2119.webp)
drinksbycountry.csv : http://bit.ly/drinksbycountry imdbratings.csv : http://bit.ly/imdbratings chiporders.csv : http://bit.ly/chiporders smallstockers.csv : http://bit.ly/smallstocks kaggletrain.csv : http://bit.ly/kaggletrain uforeports.csv : http://bit.ly/uforeports
![](https://filescdn.proginn.com/aa9614cdab390e75d70ea0ea1e8e86b8/a8faa2c3409e8b180144387bd3558aec.webp)
1. 显示已安装的版本
输入下面的命令查询pandas版本:
![](https://filescdn.proginn.com/2df54c6837e4cfbe268ae9b74d7825e1/cc32a35caeb82bea694c44e84efbb2c8.webp)
如果你还想知道pandas所依赖的模块的版本,你可以使用show_versions()函数:
![](https://filescdn.proginn.com/f5feb85ae36cd0f992a8865d3efae24b/cf9141ac80d173775cf147aecdefd4a8.webp)
2. 创建示例DataFrame
![](https://filescdn.proginn.com/3bf4d04c5d0ecdaeac52883edec938c1/7413a2d368cf9f1b7d8c9b2f6d7e8e7b.webp)
现在如果你需要创建一个更大的DataFrame,上述方法则需要太多的输入。在这种情况下,你可以使用Numpy的random.rand()函数,告诉它行数和列数,将它传递给DataFrame constructor:
![](https://filescdn.proginn.com/cb473ac502c9b609160d431d9b65b983/7472fd2417c4785dde277b7247430a3d.webp)
这种方式很好,但如果你还想把列名变为非数值型的,你可以强制地将一串字符赋值给columns参数:
![](https://filescdn.proginn.com/0bea35896ce70badca7c00edf3049a6b/36c7e9afe2f1e62f00b63eca2227c34d.webp)
你可以想到,你传递的字符串的长度必须与列数相同。
3. 更改列名
![](https://filescdn.proginn.com/f2d291a26c9f94be127a222b23cd16a2/7e950228b24d1e6d7989dc04457f88c4.webp)
我更喜欢在选取pandas列的时候使用点(.),但是这对那么列名中含有空格的列不会生效。让我们来修复这个问题。
![](https://filescdn.proginn.com/5b78d87d84843f6aa61604a9bc9f28e2/fdc2eb1870391d7a2f35606fb822e8d6.webp)
使用这个函数最好的方式是你需要更改任意数量的列名,不管是一列或者全部的列。
![](https://filescdn.proginn.com/6e7eb7abe64279319c450771b9d9e805/11bd15d9f215abb618122b738b24cbc5.webp)
如果你需要做的仅仅是将空格换成下划线,那么更好的办法是使用str.replace()方法,这是因为你都不需要输入所有的列名:
![](https://filescdn.proginn.com/cf56984b036f8b2c18b0e333831a0202/8461db62a8bba2008c9fa3e7068e6eea.webp)
上述三个函数的结果都一样,可以更改列名使得列名中不含有空格:
![](https://filescdn.proginn.com/e84b602434e061c8f3127a4cd1bc14d7/eb70de279c3b3c275d2cacc7b0d080a9.webp)
最后,如果你需要在列名中添加前缀或者后缀,你可以使用add_prefix()函数:
![](https://filescdn.proginn.com/bd66f1a74cd5a12683c5beace03c3a79/45dfc31c9647eec801641d10540345ad.webp)
或者使用add_suffix()函数:
![](https://filescdn.proginn.com/c1acc15292e042d64191d4e4c035d01d/4a1d7f6bf783b8bb7d496cd4440dc70f.webp)
4. 行序反转
![](https://filescdn.proginn.com/2c461532d5ee9253c649f8c10fd9fe21/7ecf563ff2853aab2d31144b6213b0e6.webp)
该数据集描述了每个国家的平均酒消费量。如果你想要将行序反转呢?
![](https://filescdn.proginn.com/bd18557896012af8651edf0a3f19338e/4bd38ff3e28b0878f5b4dc089062c039.webp)
如果你还想重置索引使得它从0开始呢?
![](https://filescdn.proginn.com/30a88a03d0b5759ac6ad6fada74e7871/7a7f754ae787b4ea10dfb658c30fd184.webp)
你可以看到,行序已经反转,索引也被重置为默认的整数序号。
5. 列序反转
![](https://filescdn.proginn.com/20b2e3186dc7b1bf9276f375e41bfe00/56942d90aee33b2d5c10ec3949a8897a.webp)
逗号之前的冒号表示选择所有行,逗号之后的::-1表示反转所有的列,这就是为什么country这一列现在在最右边。
6. 通过数据类型选择列
![](https://filescdn.proginn.com/e89625b24fb61860c247bef17f35e5e8/4a23678ce7ffc9339c19e37ca2f7e4d3.webp)
假设你仅仅需要选取数值型的列,那么你可以使用select_dtypes()函数:
![](https://filescdn.proginn.com/3f8bd31401306c2ddd9f07a938cc8d8d/c0180bf6e17a987a67540e119d74644e.webp)
这包含了int和float型的列。
![](https://filescdn.proginn.com/70dc0410b6e2f187a494e038069b15be/07a94a9f269eeaf7a317e2cb726da90c.webp)
你还可以选取多种数据类型,只需要传递一个列表即可:
![](https://filescdn.proginn.com/22f7843cd9a03ef2997ee03009a79f7f/25d453face4f51ef51465aed30c4f30b.webp)
你还可以用来排除特定的数据类型:
![](https://filescdn.proginn.com/4ee875df6b18828b0c32963e0485d1bc/5c4f61e04d6b3c0f3f9db497c50c1792.webp)
7. 将字符型转换为数值型
![](https://filescdn.proginn.com/0f9f23135249824d33a3558db8ceaf16/936339b9ecef448e06fc9ab1a28702a2.webp)
这些数字实际上储存为字符型,导致其数据类型为object:
![](https://filescdn.proginn.com/870880d2efd891e0caa88eb4ea27c4e3/8ea929b283d239f722051d3eba0eeadb.webp)
为了对这些列进行数学运算,我们需要将数据类型转换成数值型。你可以对前两列使用astype()函数:
![](https://filescdn.proginn.com/34d3d7f2600f50ba2f7d0de3268d8107/83b74e8444176c0356bd99da657804b7.webp)
但是,如果你对第三列也使用这个函数,将会引起错误,这是因为这一列包含了破折号(用来表示0)但是pandas并不知道如何处理它。
![](https://filescdn.proginn.com/b95b3b97085381164133c2059640cde4/caa549260a8e1c9ff3bf9cde00aa540e.webp)
如果你知道NaN值代表0,那么你可以fillna()函数将他们替换成0:
![](https://filescdn.proginn.com/e98c1698b6f11cb8fb76186c049224be/da8d6431b687d94155ca4d478383e2cf.webp)
最后,你可以通过apply()函数一次性对整个DataFrame使用这个函数:
![](https://filescdn.proginn.com/a34b74c34ffb11bc4d7357789ed8b842/d90c5e74d578754f1c5af079422ab0d2.webp)
仅需一行代码就完成了我们的目标,因为现在所有的数据类型都转换成float:
![](https://filescdn.proginn.com/8f67733bc7f57f6f899606578fb90730/148522a98c75fe80242bb4a97fa16af7.webp)
8. 减小DataFrame空间大小
![](https://filescdn.proginn.com/e0a5b1f6e582316a44dba09fdcc63546/64845ee611f62dfe5bd019e3e17422fc.webp)
可以看到它使用了304.KB。
![](https://filescdn.proginn.com/31f5fbe970829dc0eca869b96b5fdee9/41e802f6f521651139373abda893e508.webp)
通过仅读取用到的两列,我们将DataFrame的空间大小缩小至13.6KB。
![](https://filescdn.proginn.com/caa549260a8e1c9ff3bf9cde00aa540e/d3cda46c6a50e2a7e795fa5f543a382d.webp)
通过将continent列读取为category数据类型,我们进一步地把DataFrame的空间大小缩小至2.3KB。
9. 按行从多个文件中构建DataFrame
![](https://filescdn.proginn.com/d41dd22f57ccef2fc0e9608ac338fe09/0084f55b9ad7ce9baa6259808c90bf2a.webp)
这是第二天的:
![](https://filescdn.proginn.com/83a1710f9073bb47e87cf961d29e7270/ad9821ccdf7d62ddbf6388d8f04e1864.webp)
这是第三天的:
![](https://filescdn.proginn.com/14fe705db52e04ca8a836de89ee84de6/055ce7d449712df58ea44b6138c2bd64.webp)
你可以将每个CSV文件读取成DataFrame,将它们结合起来,然后再删除原来的DataFrame,但是这样会多占用内存且需要许多代码。
![](https://filescdn.proginn.com/5b03864c1ac8e7cd2332d8efe57939dc/8c2273b75eceace6afd4fae11e50fee0.webp)
glob会返回任意排序的文件名,这就是我们为什么要用Python内置的sorted()函数来对列表进行排序。
![](https://filescdn.proginn.com/40119e138186b973d1c28bada886cff3/e6718f62c8647a441ba9fb97e693d4be.webp)
不幸的是,索引值存在重复。为了避免这种情况,我们需要告诉concat()函数来忽略索引,使用默认的整数索引:
![](https://filescdn.proginn.com/eafe8db8b4681693102123f5af347b64/0d98c679257624529ba7244c6dcec488.webp)
10. 按列从多个文件中构建DataFrame
![](https://filescdn.proginn.com/bbc7063365674afaaecd9785a401bc9b/82f485183fb96a4388a60fecdac85b14.webp)
同上一个技巧一样,我们以使用glob()函数开始。这一次,我们需要告诉concat()函数按列来组合:
![](https://filescdn.proginn.com/e4f28bc5a2c18aecaf49fabfc50531b5/d78782dd730a26847aefb40f5def3e1a.webp)
现在我们的DataFrame已经有六列了。
11. 从剪贴板中创建DataFrame
![](https://filescdn.proginn.com/8d004d7eaa46a28e2ec134ba71fa9833/2fd348bc26a0a853726a3491c2ad0d6f.webp)
和read_csv()类似,read_clipboard()会自动检测每一列的正确的数据类型:
![](https://filescdn.proginn.com/9b20c2773db49879e1475b57f1a631df/b2d610bb8b30fff0e138e5c23c34588d.webp)
让我们再复制另外一个数据至剪贴板:
![](https://filescdn.proginn.com/b51e40a352c899a79b1d7596d88a752f/a27bb7b180d933450accab11128a2d22.webp)
神奇的是,pandas已经将第一列作为索引了:
![](https://filescdn.proginn.com/569ba92578a66ce3fb9bb693443d56db/fdd4d9cbeaac18ae76b62d0eff62a7da.webp)
需要注意的是,如果你想要你的工作在未来可复制,那么read_clipboard()并不值得推荐。
12. 将DataFrame划分为两个随机的子集
![](https://filescdn.proginn.com/e58b649d66e9b854f054079099f7685d/26df38e204c85cb54fe950b80ef01b32.webp)
我们可以使用sample()函数来随机选取75%的行,并将它们赋值给"movies_1"DataFrame:
![](https://filescdn.proginn.com/7b5952f78c73ecdf10d211e7c559a766/9b977b54b266562697c8624348beeb4c.webp)
接着我们使用drop()函数来舍弃“moive_1”中出现过的行,将剩下的行赋值给"movies_2"DataFrame:
![](https://filescdn.proginn.com/67bc07bc4a1ad83b873b21c9096dd47b/4faa9a6aca5461fc3048638a23b3962e.webp)
你可以发现总的行数是正确的:
![](https://filescdn.proginn.com/8b92b2439386d2157aa42781530693e0/baa55b69c4778ab01e91dc0ae78dc440.webp)
你还可以检查每部电影的索引,或者"moives_1":
![](https://filescdn.proginn.com/33aa817619f09e98a84ad7984825d9be/4b2ef718f082dbe19c6afac5be117e53.webp)
或者"moives_2":
![](https://filescdn.proginn.com/1a20fee008582881625dd5500ab8d01b/e5746a3e18e822a08acb148761b1cccf.webp)
需要注意的是,这个方法在索引值不唯一的情况下不起作用。
13. 通过多种类型对DataFrame进行过滤
![](https://filescdn.proginn.com/0fef6f2ca0101714401d3c73a6faa229/cd27ad9bd9f2ab0c68dc4e1d80fa9389.webp)
其中有一列是genre(类型):
![](https://filescdn.proginn.com/1c603b537470c3eaabeb26c7dc1685fb/36bdffd5e7d5340f9266a3d33ee7a6aa.webp)
比如我们想要对该DataFrame进行过滤,我们只想显示genre为Action或者Drama或者Western的电影,我们可以使用多个条件,以"or"符号分隔:
![](https://filescdn.proginn.com/829c00d112cedcfab1a332e7e79415df/a1ecf278ff0a34b0a5d197581da154f7.webp)
但是,你实际上可以使用isin()函数将代码写得更加清晰,将genres列表传递给该函数:
![](https://filescdn.proginn.com/a859227169524aeda8112bdd778e87fb/ab4d919f1cbd9d6d7a24a5fd18cef820.webp)
如果你想要进行相反的过滤,也就是你将吧刚才的三种类型的电影排除掉,那么你可以在过滤条件前加上破浪号:
![](https://filescdn.proginn.com/cd3744bea2ea568883081b3734f890af/32f00a60dbfde58389041140e3bb42ef.webp)
这种方法能够起作用是因为在Python中,波浪号表示“not”操作。
14. 从DataFrame中筛选出数量最多的类别
![](https://filescdn.proginn.com/2545df8665b3f8024f81ffe575925662/1a3621bb72739cc2f6ff93fa4c83d825.webp)
该Series的nlargest()函数能够轻松地计算出Series中前3个最大值:
![](https://filescdn.proginn.com/88a66e25d9e3a92de431204261f64ed5/b723d5e7a31a2802d259e0f6503af27d.webp)
事实上我们在该Series中需要的是索引:
![](https://filescdn.proginn.com/0384446e50823cd5a0472098132db2e8/b6633b0038739953ae80f1062eb48230.webp)
最后,我们将该索引传递给isin()函数,该函数会把它当成genre列表:
![](https://filescdn.proginn.com/803f39df0680a9d4ce226803f3bbbcf9/fba95cf41bd2060e02016c4c8099a5f7.webp)
这样,在DataFrame中只剩下Drame, Comdey, Action这三种类型的电影了。
15. 处理缺失值
![](https://filescdn.proginn.com/caef86d70712e8cb104b5112cd213d61/534b95fee49b6d9019ff8e6792d1aeb3.webp)
你将会注意到有些值是缺失的。
![](https://filescdn.proginn.com/d424e0cb699e82c2cf6d1bdb0675fb3a/fd7204e109ac2fcc3dd6cf9696116e44.webp)
isna()会产生一个由True和False组成的DataFrame,sum()会将所有的True值转换为1,False转换为0并把它们加起来。
![](https://filescdn.proginn.com/363e8500f38b57392f65790899b63b75/cc0ec250fce07a3fa172b8594a68e272.webp)
![](https://filescdn.proginn.com/a45c41b43327a9f42ece815c6957a48c/b41615a5714a109544d899241b325adf.webp)
或者你想要舍弃那么缺失值占比超过10%的列,你可以给dropna()设置一个阈值:
![](https://filescdn.proginn.com/d73f3231d2e9b3d71a272b0ecbce968d/6ba785e7d686efd667d76cfe537d5efe.webp)
len(ufo)返回总行数,我们将它乘以0.9,以告诉pandas保留那些至少90%的值不是缺失值的列。
16. 将一个字符串划分成多个列
![](https://filescdn.proginn.com/70845d5d7ce9bba854c01beab1870dca/e451b2794b8c620ae3eeda5908e18807.webp)
如果我们需要将“name”这一列划分为三个独立的列,用来表示first, middle, last name呢?我们将会使用str.split()函数,告诉它以空格进行分隔,并将结果扩展成一个DataFrame:
![](https://filescdn.proginn.com/56eba10b96f08b7803faf6c89ca150f2/d60aaaecbc19d900c69ad51a92624ff6.webp)
这三列实际上可以通过一行代码保存至原来的DataFrame:
![](https://filescdn.proginn.com/6b0bb45d732b0ba7b9515bde6e97d9f7/e55480fbddf4c3f7af2331f07b8df065.webp)
如果我们想要划分一个字符串,但是仅保留其中一个结果列呢?比如说,让我们以", "来划分location这一列:
![](https://filescdn.proginn.com/da87b90ccbf1377b30124ab7a454dff6/885b3a06e828b8f2b6b8963f5bcf0908.webp)
如果我们只想保留第0列作为city name,我们仅需要选择那一列并保存至DataFrame:
![](https://filescdn.proginn.com/3f070e368141e3628d5c8d28e26e9e10/42d230068c3a2919234ddb35aeda92d7.webp)
17. 将一个由列表组成的Series扩展成DataFrame
![](https://filescdn.proginn.com/e5d4ff66a531d5ddcd3969f1e63fd40d/b10d296dda14fb3d5a18bf5e7da6ca4f.webp)
这里有两列,第二列包含了Python中的由整数元素组成的列表。
![](https://filescdn.proginn.com/c8261c79260ea126012b2aeea753b6ce/f24ede450bd6ea44e8e02baedae201b0.webp)
通过使用concat()函数,我们可以将原来的DataFrame和新的DataFrame组合起来:
![](https://filescdn.proginn.com/fd47dcf700820a1a7c9962c3cc5b7540/dea862267c13150ab72c365792eed9e5.webp)
18. 对多个函数进行聚合
![](https://filescdn.proginn.com/d7e265eeb5d3d27a786ffb97c331bdf9/a59d9cc6275c5e09095b39785d8d4a67.webp)
每个订单(order)都有订单号(order_id),包含一行或者多行。为了找出每个订单的总价格,你可以将那个订单号的价格(item_price)加起来。比如,这里是订单号为1的总价格:
![](https://filescdn.proginn.com/4876a5ab1ee5ca3737c60c45c4172320/48b6d6ec6398a944af14006979b4ffdc.webp)
如果你想要计算每个订单的总价格,你可以对order_id使用groupby(),再对每个group的item_price进行求和。
![](https://filescdn.proginn.com/f1cc1602a99b20b03d51090234d7637b/2b41222228c837509f5f433cbf1ba185.webp)
但是,事实上你不可能在聚合时仅使用一个函数,比如sum()。为了对多个函数进行聚合,你可以使用agg()函数,传给它一个函数列表,比如sum()和count():
![](https://filescdn.proginn.com/751d3596469469e0c0dbdfaef5904e95/8dc6ba54edb29f87a3aaa42b5569683d.webp)
这将告诉我们没定订单的总价格和数量。
19. 将聚合结果与DataFrame进行组合
![](https://filescdn.proginn.com/f2c910dc70e1a244cbb52758254e87fa/22284bc0cb511a9017cad09f8d37c4ac.webp)
如果我们想要增加新的一列,用于展示每个订单的总价格呢?回忆一下,我们通过使用sum()函数得到了总价格:
![](https://filescdn.proginn.com/7f89c371a506bb6b458fcc3e307521f4/13177926802c390ab413670dd28a61e8.webp)
sum()是一个聚合函数,这表明它返回输入数据的精简版本(reduced version )。
![](https://filescdn.proginn.com/669b33ac9b91569e569eb7f27f3dfa7a/77bab39967191f005e3ee14b903130fd.webp)
比这个函数的输入要小:
![](https://filescdn.proginn.com/bf4ab53952a9469c609ad5dae37f453d/a8486ace169de5c6adc93c0766502c7e.webp)
解决的办法是使用transform()函数,它会执行相同的操作但是返回与输入数据相同的形状:
![](https://filescdn.proginn.com/03d5cec907b3c88a015ef60e3d01df75/47c0dce49bb3bc310fcc7b6f771f42e5.webp)
我们将这个结果存储至DataFrame中新的一列:
![](https://filescdn.proginn.com/2196f358d88e5ad5c37bbabdd77e3e75/261afc54c18c4e8b023f8e13fe4058c5.webp)
你可以看到,每个订单的总价格在每一行中显示出来了。
![](https://filescdn.proginn.com/003f85b1f8b8f3de1f22c39d40be207d/70341ed40ece4ab6ca764c856af782b5.webp)
20. 选取行和列的切片
![](https://filescdn.proginn.com/4324e84cd0ded358a44899ed5e3c865b/2c6bc037bf57ee3dfe9a19dffdcd2af1.webp)
这就是著名的Titanic数据集,它保存了Titanic上乘客的信息以及他们是否存活。
![](https://filescdn.proginn.com/371f83b1ffb5e494c388c6c6bbff525f/807a4f713314fffce1f72adb7f1b9d56.webp)
但是,这个DataFrame结果可能比你想要的信息显示得更多。
![](https://filescdn.proginn.com/c704d4335fe9c9d00c0247cc0594e71e/c977d5a4ef76fa55b808150118108bf6.webp)
如果你不是对所有列都感兴趣,你也可以传递列名的切片:
![](https://filescdn.proginn.com/c76532b3f7c6a2b570dcfda676b16637/c19d8904226e2a1b7713abe6aa2cf0a6.webp)
21. 对MultiIndexed Series进行重塑
![](https://filescdn.proginn.com/6c97b360bfca7f9a2e6c43ddc05d979f/35cc83906ce30929f1b0b12e78c08bf3.webp)
如果你想对某个类别,比如“Sex”,计算存活率,你可以使用groupby():
![](https://filescdn.proginn.com/ab94967c723f10e29d16321e853aeb77/1308be7b59af176bde206c1496ddf969.webp)
如果你想一次性对两个类别变量计算存活率,你可以对这些类别变量使用groupby():
![](https://filescdn.proginn.com/7a6ad06cf7f9a0198b323ae7a5aa8440/7922e782922f14fef5ca6514650db2bf.webp)
该结果展示了由Sex和Passenger Class联合起来的存活率。它存储为一个MultiIndexed Series,也就是说它对实际数据有多个索引层级。
![](https://filescdn.proginn.com/4fbd999c3281ba28bf661a501116e680/5f20f420fbb3cc4744937057e2312f84.webp)
该DataFrame包含了与MultiIndexed Series一样的数据,不同的是,现在你可以用熟悉的DataFrame的函数对它进行操作。
22. 创建数据透视表(pivot table)
![](https://filescdn.proginn.com/07725d5d799ba252db77e1aaa3073e5a/05e5ad12cc35e4e937c347ca47c3bf20.webp)
想要使用数据透视表,你需要指定索引(index), 列名(columns), 值(values)和聚合函数(aggregation function)。
![](https://filescdn.proginn.com/9fa28596531674292bc4ec62e0253382/e3540a364f0e4b8035470a4add2932c1.webp)
这个结果既显示了总的存活率,也显示了Sex和Passenger Class的存活率。
![](https://filescdn.proginn.com/7566a19b735fa47fa866ef9d64832d3d/3af3fb55c0d0d1c1b0eb7bbb1b8773cb.webp)
这个结果展示了每一对类别变量组合后的记录总数。
23. 将连续数据转变成类别数据
![](https://filescdn.proginn.com/09c22d728b965d415722090965fa9ff9/71ee172f66dbbe2531e4cd2095586864.webp)
它现在是连续性数据,但是如果我们想要将它转变成类别数据呢?
![](https://filescdn.proginn.com/fac914537f5b3f5b4d692f8344e447c5/ecf625d9585c84bb42fb73e51da80625.webp)
这会对每个值打上标签。0到18岁的打上标签"child",18-25岁的打上标签"young adult",25到99岁的打上标签“adult”。
24. 更改显示选项
![](https://filescdn.proginn.com/9090dd2e5559868582f9182fe19c7d00/c3c279ef9d2fe077685debe7b1ac42e1.webp)
注意到,Age列保留到小数点后1位,Fare列保留到小数点后4位。如果你想要标准化,将显示结果保留到小数点后2位呢?
![](https://filescdn.proginn.com/402277ac00aa3916234c30436a0d2c69/bfa8c422ffba7730b97deeb0a7319458.webp)
set_option()函数中第一个参数为选项的名称,第二个参数为Python格式化字符。可以看到,Age列和Fare列现在已经保留小数点后两位。注意,这并没有修改基础的数据类型,而只是修改了数据的显示结果。
![](https://filescdn.proginn.com/5f1e0b433807654467c1d05679710092/91e1cd3f56dc74ed77be8ce4f5044c03.webp)
对于其它的选项也是类似的使用方法。
25. Style a DataFrame
![](https://filescdn.proginn.com/7566a19b735fa47fa866ef9d64832d3d/a50db379f5c776775249345ce6f2ca72.webp)
我们可以创建一个格式化字符串的字典,用于对每一列进行格式化。然后将其传递给DataFrame的style.format()函数:
![](https://filescdn.proginn.com/ad7e21cd595a6c64339d22a752f926e8/576617272d85e6e8446bddcc933eae01.webp)
注意到,Date列是month-day-year的格式,Close列包含一个$符号,Volume列包含逗号。
![](https://filescdn.proginn.com/7eb029ed3989f5fa04260247d44c40c1/74cb23eecf83e11f9fdabbc457a33c2e.webp)
我们现在隐藏了索引,将Close列中的最小值高亮成红色,将Close列中的最大值高亮成浅绿色。
![](https://filescdn.proginn.com/527fd7e7541e9377a6e7a387971af322/6adb62d79e16a6c973a56c5834811305.webp)
Volume列现在有一个渐变的背景色,你可以轻松地识别出大的和小的数值。
![](https://filescdn.proginn.com/4967cc59c61611e3afd9b2634065a616/6cc06cfefa5a7daee1c89e38a2789911.webp)
现在,Volumn列上有一个条形图,DataFrame上有一个标题。
零基础学 Python,请往看下嘛 送您价值 109 的视频课 只需7天时间,跨进Python编程大门,已有3800+加入 【基础】0基础入门python,24小时有人快速解答问题;
【提高】40多个项目实战,老手可以从真实场景中学习python;
【直播】不定期直播项目案例讲解,手把手教你如何分析项目;
【分享】优质python学习资料分享,让你在最短时间获得有价值的学习资源;圈友优质资料或学习分享,会不时给予赞赏支持,希望每个优质圈友既能赚回加入费用,也能快速成长,并享受分享与帮助他人的乐趣。
【人脉】收获一群志同道合的朋友,并且都是python从业者
【价格】本着布道思想,只需 69元 加入一个能保证学习效果的良心圈子。【赠予】价值109元 0基础入门在线课程,免费送给圈友们,供巩固 如果看到这里,说明你喜欢这篇文章,请转发、点赞。 老铁,三连支持一下,好吗?↓↓↓
评论